Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет181/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   177   178   179   180   181   182   183   184   ...   256
9.7 Неперехваченные особые ситуации 
Если особая ситуация запущена и не перехвачена, то вызывается функция terminate(). Она же 
вызывается, когда система поддержки особых ситуаций обнаруживает, что структура стека нарушена, 
или когда в процессе обработки особой ситуации при раскручивании стека вызывается деструктор, и он 
пытается завершить свою работу, запустив особую ситуацию. 
Действие terminate() сводится к выполнению самой последней функции, заданной как параметр для 
set_terminate(): 
typedef void (*PFV)(); 
PFV set_terminate(PFV); 
Функция set_terminate() возвращает указатель на ту функцию, которая была задана как параметр в 
предыдущем обращении к ней. 
Необходимость такой функции как terminate() объясняется тем, что иногда вместо механизма особых 
ситуаций требуются более грубые приемы. Например, terminate() можно использовать для прекращения 
процесса, а, возможно, и для повторного запуска системы. Эта функция служит экстренным средством, 
которое применяется, когда отказала стратегия обработки ошибок, рассчитанная на особые ситуации, и 
самое время применить стратегию более низкого уровня. 
Функция unexpected() используется в сходных, но не столь серьезных случаях, а именно, когда функция 
запустила особую ситуацию, не указанную в ее описании. Действие функции unexpected() сводится к 
выполнению самой последней функции, заданной как параметр для функции set_unexpected(). 
По умолчанию unexpected() вызывает terminate(), а та, в свою очередь, вызывает функцию abort(). 
Предполагается, что такое соглашение устроит большинство пользователей. 
Предполагается, что функция terminate() не возвращается в обратившеюся ней функцию. 
Напомним, что вызов abort() свидетельствует о ненормальном завершении программы. Для 
нормального выхода из программы используется функция exit(). Она возвращает значение, которое 
показывает окружающей системе насколько корректно закончилась программа. 


Бьерн Страуструп.
Язык программирования С++ 
 
254 


Достарыңызбен бөлісу:
1   ...   177   178   179   180   181   182   183   184   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет