从嵌套的捕获中抛出是否有效?

问题描述 投票:0回答:0

在下面的例子中:

try {
  fun1();
} catch (...) {
  try {
    fun2();
  } catch (...) {
    throw; // 2. Propagate potential exception in fun2()
  }
  throw; // 1. Propagate potential exception in fun1()
}

(2)中的语句会触发

std::terminate
吗?我正在阅读有关 throw:

的文档

如果堆栈展开机制直接调用的任何函数,在异常对象初始化之后和异常处理程序开始之前,异常退出,std::terminate 被调用。此类函数包括具有自动存储持续时间且范围已退出的对象的析构函数,以及被调用(如果未被删除)以初始化按值捕获参数的异常对象的复制构造函数。

我想知道在嵌套的 try/catch 块中重新抛出是否不是一个好主意。

c++ exception
© www.soinside.com 2019 - 2024. All rights reserved.