try
{
// 注意:在析构函数中抛出了异常
throw std::exception("在析构函数中故意抛出一个异常,测试!");
}
catch(…) {}
}
void Func() throw()
{
throw std::exception("故意抛出一个异常,测试!");
}
void Other() {}
};
程序运行的结果如下:
开始准备销毁一个MyTest_Base类型的对象
故意抛出一个异常,测试!
怎么样,现在是不是一切都已经风平浪静了。
析构函数中抛出异常时概括性总结
(1) C++中析构函数的执行不应该抛出异常;
(2) 假如析构函数中抛出了异常,那么你的系统将变得非常危险,也许很长时间什么错误也不会发生;但也许你的系统有时就会莫名奇妙地崩溃而退出了,而且什么迹象也没有,崩得你满地找牙也很难发现问题究竟出现在什么地方;
(3) 当在某一个析构函数中会有一些可能(哪怕是一点点可能)发生异常时,那么就必须要把这种可能发生的异常完全封装在析构函数内部,决不能让它抛出函数之外(这招简直是绝杀!呵呵!);
(4)一定要切记上面这几条总结,析构函数中抛出异常导致程序不明原因的崩溃是许多系统的致命内伤/ 至此在C++程序中,各种可能的地方抛出的异常将如何地来处理这个主题已基本讨论完毕!