logo search
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.15.6.1 Функция terminate()

Иногда от предусмотренной обработки особых ситуаций приходится

переходить к более грубым приемам, например:

- когда механизм управления особыми ситуациями не смог найти

обработчик для запущенной особой ситуации;

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

с нарушенной структурой стека;

- когда деструктор, вызванный в процессе раскрутки стека при запуске

особой ситуации, сам пытается завершить выполнение программы,

запустив особую ситуацию.

В этих случаях вызывается функция

void terminate();

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

при последнем обращении к set_terminate():

typedef void(*PFV)();

PFV set_terminate(PFV);

Функция, которая была задана в предыдущем вызове set_terminate(),

будет возвращаемым значением текущего вызова. Это помогает

пользователю реализовать алгоритм восстановления стека. По умолчанию

функция terminate() вызывает abort().

Выбор с помощью terminate() такой функции, которая вместо

действительного завершения программы, пытается вернуться в

вызвавшую программу, является ошибкой.