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

We use cookies. Read the Privacy and Cookie Policy

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

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

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

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

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

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

void terminate();

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

typedef void(*PFV)();

PFV set_terminate(PFV);

Функция, которая была задана в предыдущем вызове set_terminate(), будет возвращаемым значением текущего вызова. Это помогает пользователю реализовать алгоритм восстановления стека. По умолчанию функция terminate() вызывает abort().

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