捕获析构函数中抛出异常的块

时间:2015-07-06 12:58:37

标签: c++

我有一些"嵌套"尝试捕获块,跨功能分开,但基本上它归结为类FooBar,对此:

try {
    for (;;){
        try
        {
            Foo foo;
            try {
                Bar bar;
                if (something){
                    continue;
                }
            } catch (...){
                std::cout << "inner";
            }
        } catch (...){
            std::cout << "middle";
        }
    }
} catch (...){
    std::cout << "outer";
}

这两个类都可以在析构函数中抛出异常。

如果达到continue,那么当堆栈展开时,在foobar的销毁期间,会抛出异常,然后我希望打印&# 34;外部&#34;,但它没有那样做。发生了什么事?

1 个答案:

答案 0 :(得分:3)

标准明确指出:

如果析构函数抛出异常,则它会被try块捕获,其中变量已定义

因此,如果~Bar()抛出异常,则输出为“inner”。如果~Foo()抛出,则输出为“中间”;