Следует выдавать только образцы типов, полученных из исключения 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;
оператор.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Обработка исключений |
Категория: Консультационные, Автоматизированные |