捕获在析构函数中引发的异常的块

P45迫在眉睫

我有一些“嵌套”的try catch块,可以跨多个函数进行拆分,但是从本质上讲,它归结为类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,抛出一个异常,那么我期待打印“外”,但它没有做到这一点。到底是怎么回事?

拔示巴

该标准明确说明了这一点:

如果析构函数抛出异常,则该异常会try定义了变量捕获

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章