gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:59 27 4
gpt4 key购买 nike

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

#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?
}
};

最佳答案

是的,您可以使用 function-try-block:

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

但是,对于这样的异常,您实际上无能为力。该标准规定您不能访问 B 对象的非静态数据成员或基类。

此外,您不能使异常静音。与其他函数不同,一旦析构函数(或构造函数)的 function-try-block 处理程序完成执行,异常将被隐式重新抛出。

总而言之,析构函数真的不应该抛出异常。

关于c++ - 如何从成员析构函数中捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36156733/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com