Все создаваемые исключения должны быть уникальными
Все создаваемые исключения должны быть уникальными.
Если один и тот же объект создается как исключения в нескольких местах, обработка этих исключений и отладка кода могут быть затруднены. Создание уникальных объектов исключений упрощает процесс отладки. Рассмотрим этот код при возникновении нескольких исключений.
void f1(){
//...
throw std::logic_error("Error");
}
void f2(){
//...
throw std::logic_error("Error");
}
void f3(){
//...
throw std::logic_error("f3: Unexpected Condition");
}
int main(){
try{
f1();
f2();
f3();
catch(std::logic_error& e){
std::cout << e.what() << '\n';
}
}
}f1() и f2() создать то же исключение, в то время как f3() вызывает уникальное исключение. Во время отладки невозможно определить, возникает ли исключение из f1() или f2(). Вы знаете, когда возникает исключение из f3(). Чтобы упростить процесс отладки, создайте уникальные исключения. Исключение является уникальным, если выполняется одно из следующих условий:
Тип исключения не встречается в другом месте проекта.
Сообщение об ошибке или код ошибки не появляются в другом месте проекта.
Основные моменты Polyspace ®throw операторы, которые вызывают один и тот же класс, значение перечисления, целое число или постоянный литерал в качестве исключений, и помечают оператор final throw, который вызывает один и тот же объект. Можно создать одно и то же исключение в нескольких местах с помощью предварительно структурированного объекта исключения. Polyspace не помечен throw операторы, которые вызывают такие предварительно структурированные объекты исключения. Если один и тот же объект-литерал поднимается в нескольких местах, Polyspace не помечает его, если литерал не является константой или если литерал скрыт за переменной.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Обработка особых ситуаций |
| Категория: Консультации, Автоматизированные |