class ScopedShit
{
public:
ScopedShit() {
cout << "ScopedShit()" << endl;
}
~ScopedShit() {
cout << "~ScopedShit()" << endl;
}
};
void foo()
{
ScopedShit ss;
int x = 0;
int y = 5 / x;
}
int main()
{
__try {
foo();
}
__except(true) {
cout << "Continuing..." << endl;
}
}
输出:
ScopedShit()
继续...
我正在阅读这篇文章http://www.codeproject.com/Articles/2126/How-aC-compiler-implements-exception-handling,其中解释了:
但在它(异常处理程序)调用 catch 块之前(它从 funcinfo 结构中知道 catch 块的地址,见图 4),它必须执行堆栈展开:清理该函数帧下面的函数的堆栈帧。堆栈帧的清理涉及到非常小的复杂性:异常处理程序必须在异常发生时在帧上找到函数的所有本地对象并调用它们的析构函数。
我错过了什么吗?