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

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

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

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

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