hiz*_*zki 4 exception-handling
例如,在以下代码中:
#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(int, char**)
{
try {
cout << "Entering try...catch block" << endl;
A objectA;
B objectB;
cout << "Exiting try...catch block" << endl;
}
catch (char* ex) {
cout << ex << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
B析构函数抛出一个异常,它A在展开堆栈时调用析构函数,导致抛出另一个异常.该计划的反应是什么?
简短的回答?Bang,申请终止.
在堆栈展开期间,所有这些堆栈帧中的所有本地对象都被破坏.如果其中一个析构函数抛出一个异常(比如抛出一个Bar对象),那么C++运行时系统就处于一种不赢的状态:它是否应该忽略Bar并最终进入
} catch (Foo e) {
Run Code Online (Sandbox Code Playgroud)
最初的地方?它应该忽略Foo并寻找一个
} catch (Bar e) {
Run Code Online (Sandbox Code Playgroud)
处理程序?没有好的答案 - 任何一种选择都会丢失信息.
所以C++语言保证它会terminate()在此时调用,并terminate()杀死进程.砰,你死了.
Stack Overflow的相关问题:
| 归档时间: |
|
| 查看次数: |
2486 次 |
| 最近记录: |