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