Я пытаюсь вызвать функцию завершения. [Я думаю, что эта функция вызывается, когда возникает другое исключение при раскручивании стека]. Тот же сценарий, который я написал и пытаюсь проверить.Связано с обработкой исключений
Я могу видеть, что вызов выполняется для функции terminate(), но я не уверен, почему я получаю сообщение об ошибке Debug.
При попытке выполнить следующий код в Visual Studio 2008, я получаю диалоговое окно с сообщением об ошибке «Ошибка отладки». Также отображаются выход:
Выход:
В блоке Ьги
В конструктору
В конструкторе B
В деструкторе B
В деструкторе A
Звонок на my_terminate
Почему это окно «Ошибка отладки» появляется во время выполнения этого кода? Ожидается поведение? Как удалить эту ошибку?
class E
{
public:
const char* message;
E(const char* arg) : message(arg) { }
};
void my_terminate()
{
cout << "Call to my_terminate" << endl;
};
class A
{
public:
A() { cout << "In constructor of A" << endl; }
~A()
{
cout << "In destructor of A" << endl;
throw E("Exception thrown in ~A()");
}
};
class B
{
public:
B() { cout << "In constructor of B" << endl; }
~B() { cout << "In destructor of B" << endl; }
};
void main()
{
set_terminate(my_terminate);
try
{
cout << "In try block" << endl;
A a;
B b;
throw("Exception thrown in try block of main()");
}
catch (const char* e)
{
cout << "Exception: " << e << endl;
}
catch (...)
{
cout << "Some exception caught in main()" << endl;
}
cout << "Resume execution of main()" << endl;
getch();
}
Я уверен, что вопрос: «Почему это исключение не попало в блоки блокировки?» – Mat