在阅读 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() 被调用。
有人可以解释一下吗?提前致谢。
我的理解是,这不是一个好主意。因为,如果在堆栈展开期间由于异常而调用 T 析构函数,然后 Close() 抛出异常,那么这将导致 Terminate() 被调用。
The try
-catch
block 正是为了防止这种情况发生。代码:
try
{
Close();
}
catch( ... ) { }
将捕获抛出的任何异常Close
并忽略它们。因此析构函数won't抛出任何异常,这可能导致调用终止函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)