Следует выдавать только образцы типов, полученных из исключения std::
Выдавать следует только образцы типов, полученных из исключения std::.
Включение типичных объектов в качестве исключений может затруднить чтение и повторное использование кода. Рассмотрим этот код, где исключения возникают в двух разных try-catch блоки.
try{
//..
throw 1; // 1 means logic error;
}
catch(...){
//...
}
//...
try{
//...
throw std::logic_error{"Logic Error"};
}
catch(std::exception& e){
//..
}Во втором кодовом блоке значение и причина исключения четко сообщаются путем поднятия конкретного и уникального типа объекта в качестве исключения. Такие throw операторы также соответствуют стандартным соглашениям. Четкое информирование о намерениях разработчиков, соблюдение стандартных соглашений и выдвижение уникальных типов исключений облегчают чтение, понимание и повторное использование кода.
Класс std::exception обеспечивает последовательный интерфейс для создания уникальных исключений, соответствующих конкретным ошибкам. Стандартным соглашением является использование этого интерфейса для выдачи исключений. Чтобы сделать ваш код читаемым и переиспользуемым, поднимите объекты определенных типов, которые получают из std::exception как исключение. Типовые объекты std::exception не может быть уникальным. Такие исключения нарушают это правило.
Polyspace® флаги a throw оператор, если тип приподнятого объекта не является классом, из которого публично получают std::exception.
Если приподнятый объект является частью нескольких иерархий наследования, то Polyspace помечает объект, если ни один из базовых классов не выводится публично std::exception или если базовые классы не включают std::exception.
Если вы используете throw; оператор без аргумента в блоке catch, Polyspace не помечает throw; оператор.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
| Группа: Обработка исключений |
| Категория: Консультационные, Автоматизированные |