c++ - 在析构函数中尝试 Catch block

标签 c++ exception destructor

在阅读 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()。

有人可以阐明这一点吗?提前致谢。

最佳答案

My understanding was, this is not a good idea. Because, if T destructor is called during stack unwinding due to an exception, and then Close() throws an exception, then this will cause Terminate() to be called.

try-catch block 正是为了防止这种情况。代码:

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

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

关于c++ - 在析构函数中尝试 Catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31483831/

相关文章:

C# 作为脚本语言

C++:为什么无法在派生类中访问 protected 构造函数?

exception - 捕获代号一中的 NetworkManager 异常

c++ - 如何在 C++ 中构建执行异步后台任务的对象

c++ - 如何阻止在堆栈分配的对象上调用析构函数?

c++ - 带优先队列的 Dijkstra 算法

c++ - 静态结构 - 定义、对象、成员

c++ - 仅在发布版本中出现异常

exception - 来自 Google Analytics Analytics.js 异常跟踪的异常报告

c++ - 基类的析构函数在不破坏基类的情况下被调用!