一个关于异常处理的问题:
按照C++的定义,类的析构函数应该在类的实例被销毁时自动调用。
但下面一段代码中,异常发生后,test_c的析构函数却没有被调用。
更奇怪的是,如果把“int *a=0; *a=0;”换成一个普通的throw语句,
比如“throw "haha";”则,test_c的析构函数就可以被调用了。
请问,这是编译器的错误呢,还是C++中就是这样规定的?
注:我的编译环境是 WinXP + VC.NET。
请各位大侠指教。
===================
# include <stdio.h>
class test_c
{
public :
test_c()
{
printf("ctor\n");
}
~test_c()
{
printf("dtor\n");
}
};
int main()
{
try
{
test_c test;
// 这一行是为了产生异常
int * a = 0; *a = 1;
}
catch(...)
{
}
getchar();
return 0;
}
===================