我在test.h中有一个简单的类
class test
{
test()
{
std::cout<<"constructor called"<<std::endl;
}
static test m_test;
~test()
{
std::cout<<"I am here"<<std::endl;
}
};
,静态成员在test.cpp中定义为:
test test::m_test;
主要没有:
main()
{
}
我可以在输出中看到:
constructor called
I am here
这很好。现在我添加一些生成如下异常的代码:
main()
{
for(int i=-1; i<1; i++)
{
i=1/i; // this line generate an exception and close the application.
}
}
在这种情况下,不会调用析构函数。我只能看到构造函数被调用。
为什么会这样?
如何确保抛出预期和应用程序崩溃,是否会调用析构函数?假设我只能更改我的测试类而不是主应用程序。
答案 0 :(得分:1)
除以零也不例外!无法捕获它,因为它是操作系统中断程序的硬件信号。
在这里阅读更多内容:
C++ : Catch a divide by zero error
为了抛出随机异常你可以做
throw std::runtime_error("Oh no!");
但请确保使用以下命令捕获调用代码中的抛出异常:
try {
codeThatThrowsException();
} catch(const std::runtime_error& e) {
std::cout << "An exception was thrown: " << e.what() << std::endl;
}