#include <iostream>
#include <stdexcept>
class A
{
public:
A()
{
std::cout << "A" << std::endl;
fake();
}
virtual ~A()
{
throw std::runtime_error("Test ex in ~A()");
std::cout << "~A" << std::endl;
}
void fake()
{
d();
}
virtual void d()
{
std::cout << "A::d()" << std::endl;
}
};
class B : public A
{
public:
B()
{
std::cout << "B" << std::endl;
fake();
}
~B()
{
std::cout << "~B" << std::endl;
}
virtual void d()
{
std::cout << "B::d()" << std::endl;
}
};
class C : public B
{
public:
C()
{
std::cout << "C" << std::endl;
fake();
}
~C()
{
throw std::runtime_error("Test ex in ~C()");
std::cout << "~C" << std::endl;
}
virtual void d()
{
std::cout << "C::d()" << std::endl;
}
};
int main( int argc, char *argv[] )
{
try {
{
C object;
}
}
catch (const std::exception& e) {
std::cout << "catch: " << e.what() << std::endl;
}
return 0;
}
На выходе получаю:
Запускается /home/evgeny/develop/build-testcpp-Desktop_Qt_5_2_1_GCC_64bit-Debug/testcpp...
A
A::d()
B
B::d()
C
C::d()
~B
terminate called after throwing an instance of 'std::runtime_error'
what(): Test ex in ~A()
Программа неожиданно завершилась.
/home/evgeny/develop/build-testcpp-Desktop_Qt_5_2_1_GCC_64bit-Debug/testcpp завершился крахом
Как перехватить все исключения?