gpt4 book ai didi

c++ - 当函数以 2 个异常退出时,原始异常会发生什么

转载 作者:行者123 更新时间:2023-11-28 07:34:29 24 4
gpt4 key购买 nike

<分区>

注意:我在 redhat linux 6.3 上使用 gcc 4.4.7。下面示例中的问题是关于 GCC 对 A::doSomething() 抛出的第一个异常做了什么,而不是关于是否应该从析构函数抛出异常。

在以下代码中,函数 A::doSomething() 退出并出现 2 个 logic_error 异常。析构函数 ~A() 中的第二个 logic_error 似乎覆盖了 A::doSomething() 中的 logic_error >。该程序的输出如下所示。

我的问题是 A::doSomething() 抛出的 logic_error 发生了什么。有办法恢复吗?

#include <iostream>
#include <stdexcept>

#include <sstream>

using namespace std;

class A
{
public:
A(int i):x(i) {};
void doSomething();

~A() {
cout << "Destroying " << x << endl;
stringstream sstr;
sstr << "logic error from destructor of " << x << " ";
throw logic_error(sstr.str());
}

private:
int x;
};

void A::doSomething()
{
A(2);
throw logic_error("from doSomething");
}


int main()
{

A a(1);
try
{
a.doSomething();
}
catch(logic_error & e)
{
cout << e.what() << endl;
}

return 0;
}

输出是:

Destroying 2
logic error from destructor of 2
Destroying 1
terminate called after throwing an instance of 'std::logic_error'
what(): logic error from destructor of 1
Aborted (core dumped)

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