在析构函数中尝试 Catch 块

2024-02-15

在阅读 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-catchblock 正是为了防止这种情况发生。代码:

try
{
    Close();
}
catch( ... ) { }

将捕获抛出的任何异常Close并忽略它们。因此析构函数won't抛出任何异常,这可能导致调用终止函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在析构函数中尝试 Catch 块 的相关文章

随机推荐