Обработка непредусмотренных исключений

Функция unexpected активирует функцию, зарегистрированную вызовом

set_unexpected (определяется в заголовочном файле exception). Если никакой

функции не было зарегистрировано таким образом, по умолчанию вызывается

terminate. Функция terminate может вызываться в следующих случаях:

1. Механизм исключений не может найти для выброшенного исключения

подходящий catch.

2. Деструктор пытается выбросить исключение в процессе разматывания

стека.

3. При попытке перебросить исключение, когда в данный момент никакое

исключение не обрабатывается.

4. Вызов функции unexpected по умолчанию вызывает terminate.

(В разделе 15.5.1 Стандартного документа по C++ перечислены некоторые

дополнительные случаи.) Посредством вызова set_terminate можно

специфицировать функцию, активируемую при вызове terminate. В противном случае

terminate будет активировать функцию abort, которая завершает программу,

не вызывая никаких деструкторов еще остающихся объектов с

автоматическим или статическим классом памяти. При преждевременном завершении

программы это может приводить к утечкам ресурсов.

Обе функции set_unexpected и set_terminate возвращают указатель на

последнюю функцию, вызывавшуюся соответственно функциями unexpected

и terminate (или 0, если функция вызывается впервые). Это позволяет

программисту сохранить указатель на функцию, чтобы впоследствии ее можно

было восстановить. Функции set_unexpected и set_terminate принимают в

качестве аргумента указатель на функцию без параметров с возвращаемым

типом void.

Если последним действием определенной программистом функции

завершения не является выход из программы, будет вызвана функция abort для

завершения ее выполнения после того, как исполнятся все остальные операторы

завершающей функции.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: