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-a-C-compiler-implements-exception-handling,其中解释了:
但在它之前(异常处理程序)调用catch块(它知道catch的地址) 阻止来自funcinfo结构,见图4),它必须执行堆栈 展开:清理下面函数的堆栈帧 功能的框架。堆叠框架的清洁涉及很少 复杂:异常处理程序必须找到所有的本地对象 异常和调用时帧上的活动功能 他们的破坏者。
我错过了什么吗?