如何从成员析构函数中捕获异常

LukášBednařík

我想知道是否(以及如何)捕获在成员析构函数中引发的异常。例:

#include <exception>

class A
{
public:
    ~A() {
        throw std::exception("I give up!");
    }
};

class B
{
    A _a;
public:
    ~B() {
        // How to catch exceptions from member destructors?
    }
};
Angew不再为SO感到骄傲

是的,您可以使用function-try-block捕获此类异常

class B
{
    A _a;
public:
    ~B() try {
        // destructor body
    }
    catch (const std::exception& e)
    {
        // do (limited) stuff
    }
};

但是,您不能真正做很多这样的例外。该标准指定您不能访问对象的非静态数据成员或基类B

同样,您不能使异常保持沉默。与其他函数不同,一旦析构函数(或构造函数)function-try-block处理程序完成执行,则将隐式重新抛出异常

总而言之,析构函数实际上不应引发异常。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章