Следует создать исключение только для экземпляров типов, производных от 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 ® throw оператор, если тип порожденного объекта не является классом, публично производным от std::exception.
Если возведенный объект является частью иерархии множественного наследования, то Polyspace помечает объект, если ни один из базовых классов не является общедоступным производным от std::exception или если базовые классы не включают std::exception.
Если используется throw; оператор без аргумента в блоке catch, Polyspace не помечает throw; заявление.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Обработка особых ситуаций |
| Категория: Консультации, Автоматизированные |