670 ___ ___ ________________Часть IV. Новые возможности C++

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

Задание собственного обработчика завершения

Если ваша программа генерирует исключительную ситуацию, а подходящий обработчик найти не удается вплоть до самой функции main о включительно, то программа по умолчанию завершается. Система останавливает выполнение программы и выводит на экран сообщение: "Abnormal program

termination .

Если подобное поведение вам не по вкусу, то его очень просто изменить. Когда программа не может найти соответствующий обработчик, она вызывает ФУНКЦИЮ terminate (). С ПОМОЩЬЮ фуНКЦИИ set_terminate^) ВЫ МОЖСТе

задать свою собственную процедуру terminate о (обработчик завершения), как показано в листинге 22.21.

// Необходимые заголовки ttinclude <stdlib.h> ftinclude <iostream.h> #include <except.h>

void MyTerminate() (

cout « "Вынужден сообщить вам, что исключительная ситуация" « "не может быть обработана.\п";

cout « "Я умываю руки...\п";

exit(-l) ;

}

void main() {

set_terminate(MyTerminate) ;

try {

throw "Неужели меня никто не перехватит?";

,} catch (int) { }

! Предупреждение

[Для получения доступа к^рототипу функции set_temiinate () необходимо ¦ включить в модуль заголовок except.h.