我有一些"嵌套"尝试捕获块,跨功能分开,但基本上它归结为类Foo
和Bar
,对此:
try {
for (;;){
try
{
Foo foo;
try {
Bar bar;
if (something){
continue;
}
} catch (...){
std::cout << "inner";
}
} catch (...){
std::cout << "middle";
}
}
} catch (...){
std::cout << "outer";
}
这两个类都可以在析构函数中抛出异常。
如果达到continue
,那么当堆栈展开时,在foo
和bar
的销毁期间,会抛出异常,然后我希望打印&# 34;外部&#34;,但它没有那样做。发生了什么事?
答案 0 :(得分:3)
标准明确指出:
如果析构函数抛出异常,则它会被try
块捕获,其中变量已定义。
因此,如果~Bar()
抛出异常,则输出为“inner”。如果~Foo()
抛出,则输出为“中间”;