Задание собственного неожиданного обработчика



Так же как и обработчик terminate(), обработчик unexpected() позволяет

перед завершением программы выполнить какие-то действия. Но в отличие от обработчика завершения неожиданный обработчик может сам генерировать исключительные ситуации. Таким образом, собственный неожиданный обработчик может сгенерировать исключительную ситуацию, на этот раз уже входящую в спецификацию. Установка собственного неожиданного обработчика выполняется с помощью функции set_unexpected(). Приведенная ниже программа демонстрирует применение спецификации исключений и перехват неожиданных исключительных ситуаций с помощью собственного обработчика.

#include <iostream>

using namespace std;

#include <exception>

class first{};

class second: public first{};

class third: public first{};

class my_class{};

void my_unexpected()

{ cout<<"my_unexpected handler"<<endl;

throw third(); // возбуждение исключения типа объект

} // класса third

void f(int i) throw(first) // указание спецификации исключения

{ if(i) throw second(); //

else throw my_unexpected();

}

int main()

{ set_unexpected(my_unexpected);

try {

 

f(1);

}

catch(first) {

cout<<"first handler"<<endl;

}

catch(my_class) {

cout<<"my_class handler"<<endl;

}

try{

f(0);

}

catch(first) {

cout<<"first handler"<<endl;

}

catch(my_class) {

cout<<"my_class handler"<<endl;

}

return 0;

}

Результат выполнения программы:

first handler

my_unexpected handler

first handler

В данной программе вызов функции f() во втором блоке try приводит к

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


 


Дата добавления: 2015-12-21; просмотров: 19; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!