我有以下代码:
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "A::A()" << endl;}
~A() { cout << "A::~A()" << endl; throw "A::exception";}
};
class B {
public:
B() { cout << "B::B()" << endl; throw "B::exception";}
~B() { cout << "B::~B()";}
};
int main() {
try {
cout << "Entering try...catch block" << endl;
A objectA;
B objectB;
cout << "Exiting try...catch block" << endl;
} catch (char const * ex) {
cout << ex << endl;
}
return 0;
}
现在,在陈述问题之前,我想指出这段代码是不好的做法(例如,从构造函数中抛出异常将导致对象没有被完全创建,因此不会调用析构函数并且可能导致内存泄漏或其他问题)。
现在,主要的顺序是这样的:
印刷
"Entering try...catch block"
。调用
A
的构造函数,打印"A::A()"
调用
B
的构造函数,打印"B::B()"
,并抛出异常。抛出异常,该行将
"Exiting try...catch block"
不被打印。块被退出,所以A
's 的析构函数被调用。A
的析构函数打印"A::~A()"
并抛出另一个异常。
catch
第二个异常(在 5 中)导致 main 在进入块之前抛出异常。
我的问题是 - 有没有办法在不改变类的情况下捕获主要的第二个A
异常B
?
我试图用另一个块包围整个try-catch
街区和街区内部,但这没有用。catch
try-catch
谢谢。