我希望我能更明确,但是有很多可能的场景在飞行中有几个例外——都涉及析构函数,但仍然如此。
从 C++98 到 C++17 的行为有何不同?
我敢于预言“飞行中有几个例外,没有办法抓住”。
您可能会阅读throw 的文档。
如果任何由堆栈展开机制直接调用的函数,在异常对象初始化之后和异常处理程序开始之前,以异常退出,
std::terminate则调用。此类函数包括具有自动存储持续时间的对象的析构函数,其范围已退出,以及被调用(如果未省略)以初始化按值捕获参数的异常对象的复制构造函数。
Sostd::terminate被称为而不是“飞行中的几个例外”。
您可能仍然有几个例外,只要它们不退出各自的功能:
void foo()
{
struct S
{
~S()
{
try {
throw std::runtime_error("in S");
} catch (const std::exception& ex) {
std::err << ex.what(); // "in S"
}
}
} s;
throw std::runtime_error("In Foo");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |