关于C++析构函数 在VS2008下面编译
class A{
private:
int a;
public:
A(int b = 10):a(b){cout<<"struct"<<endl;}
~A(){cout<<"destruct"<<endl;}
void start() {
cout<<a<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A* b;
{
A a(2);
b = &a;
b->start();
}
b->start(); //这里a已经被析构了,为什么这里不报错呢!?
getchar();
return 0;
}
[解决办法]
A a(2); A* b; 都是在栈中创建的,它们在_tmain返回后才会被清栈销毁
[解决办法]
A* b;
{
A a(2);
b = &a;
b->start();
// 在这里a被析构了,b变成野指针
}
b->start(); // 这里使用野指针,不一定报错
[解决办法]
我的认为就是那块内存析构只是告诉操作系统,那是空闲的了,,但那块内存还真真的在那里,而且里面数据没有变动,,所以它还能执行~~
具体测试你在析构里把a的值改改,,后面还能输出。~
[解决办法]