【发布时间】:2015-10-07 15:32:26
【问题描述】:
在阅读 Hurb Sutter 的“More Exceptional C++”时,我偶然发现了以下代码:
// Example 19-5: Alternative right solution
//
T::Close()
{
// ... code that could throw ...
}
T::~T() /* throw() */
{
try
{
Close();
}
catch( ... ) { }
}
我的理解是,这不是一个好主意。因为,如果在堆栈展开过程中由于异常调用了 T 析构函数,然后 Close() 抛出异常,那么这将导致 Terminate() 被调用。
有人可以解释一下吗?提前致谢。
【问题讨论】:
-
一定要避免有可能抛出异常的析构函数,适当的捕获和管理就好了。
-
您可能会喜欢阅读N4152,“未捕获的异常”,投票支持 C++17。
标签: c++ exception destructor