主题:求教VC++异常处理问题
请看以下代码
#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<"ctor or A"<<endl;};
~A(){cout<<"dtor or A"<<endl;};
};
void f()
{
A a;
throw 5;
}
int main()
{
f();
return 0;
}
以上代码在VC++6中运行,发现a的析构函数未被调用,如果把main改成这样:
int main()
{
try
{
f();
}
catch(...)
{
}
return 0;
}
a就会被析构。
按Effective C++的说法,只在违反异常规范的throw才不会释构对象,程序直接退出。上述函数都未声明异常规范,即允许抛出任何异常,为何非得要捕获异常才能析构a?
谢谢