为什么在这个类中没有调用析构函数

时间:2014-03-17 15:07:17

标签: c++ exception destructor

我在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.
     }
}

在这种情况下,不会调用析构函数。我只能看到构造函数被调用。

为什么会这样?

如何确保抛出预期和应用程序崩溃,是否会调用析构函数?假设我只能更改我的测试类而不是主应用程序。

1 个答案:

答案 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;
}