printИсключительные ситуации

printНазначение. Стандартные исключения

В ходе выполнения функции может произойти исключительная ситуация, когда из-за обнаруженной ошибки продолжить нормальное выполнение алгоритма невозможно. Выполнение этого алгоритма должно завершиться, затем функция может:
  • Выдать сообщение об ошибке и аварийно завершить выполнение программы. Недостатки: снижается надежность программы, введенная пользователем информация теряется, нет возможности предпринять альтернативные действия, например, сохранить информацию на другом диске.
  • Вернуть специальное значение. Например, функция malloc при ошибке выделения памяти возвращает NULL. Недостатки: область значений функции может содержать все значения типа результата функции, проверка результата каждого вызова в сложном выражении невозможна, а в более простых приводит к существенному увеличению размера программы, поэтому часто проверка не выполняется.
  • Установить состояние ошибки в специальной глобальной переменной. Например, математические функции записывают код ошибки в errno. Недостатки: проверка этой переменной после каждого оператора с вызовом функции приводит к существенному увеличению размера программы, поэтому часто проверка не выполняется.
  • Вызвать специальную функцию обработки ошибки. Например, некоторые реализации математических функций при ошибке вызывают функцию matherr. Недостатки: при отсутствии исключений эта функция должна выполнить одно из трех рассмотренных ранее действий.

Механизм исключений позволяет передать управление и всю необходимую информацию в ту часть программы, которая сможет обработать данную ошибку, а затем продолжить нормальное выполнение программы. Размер программы при этом не увеличивается.

Все стандартные исключения являются производными от класса exception. К стандартным исключениеям относятся:
  • bad_alloc, генерируемое операцией new;
  • bad_cast, генерируемое операцией dynamic_cast;
  • bad_typeid, генерируемое операцией typeid;
  • bad_exception, генерируемое для обработки исключения, непредусмотренном в заголовке функции;
  • исключения, порождаемые классами и алгоритмами STL.
loading