понедельник, 17 ноября 2008 г.

Использование set_terminate

Решил немного написать по поводу set_terminate.
Функция set_terminate объявлена в заголовочном файле exception. Она имеет следующий вид:

terminate_handler set_terminate(terminate_handler) throw().

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

void (* pF)(void).

Если мы через функцию set_terminate устанавливаем новый обработчик, то она вернет нам старый, если ранее такой существовал для данной ситуации.
Возникает вопрос: а зачем нужно использовать set_terminate? В ответ можно сказать только следующее, что при ошибке в программе, которая ведет к терминированию этой программы, может возникнуть необходимость сохранить данные, закрыть файлы, записать в лог информацию о причинах ошибки и т.д.
В заключении привожу пример использования:

#include <iostream>
#include <exception>

void func1()
{
std::cout<<"The end"<<std::endl;
}

int main (int argc, char * const argv[]) {
std::cout<< "Hello, World!\n";
std::set_terminate(func1);
throw std::exception();
return 0;
}

В результате работы программы получаем следующее:

[Session started at 2008-11-17 23:10:04 +0300.]
Hello, World!
The end

Комментариев нет: