当前位置: 代码迷 >> C++ >> 虚析构函数,为什么,哪位高手能解释?懵了
  详细解决方案

虚析构函数,为什么,哪位高手能解释?懵了

热度:10219   发布时间:2013-02-26 00:00:00.0
虚析构函数,为什么,谁能解释?懵了。
下面调用了两次a->~A(),
为什么第一次成功调用了子类的析构函数,
而第二次却没有调用子类的析构函数?





class A
{
public:
A(){}
virtual ~A()
{
cout<<"~A()  "<<this<<endl;
}
int iAA;
};


class B: public A
{
public:
B(){}
virtual ~B()
{
cout<<"~B()  "<<this<<endl;
}
};



B* b = new B();
A* a = b;

cout<<"*******************************"<<endl;
a->~A();
cout<<"*******************************"<<endl;
a->~A();
cout<<"*******************************"<<endl;










------解决方案--------------------------------------------------------
引用:
为什么a不存在了?
A()里面什么都没有做吧?数据应该是保持不变的啊?
引用:第一次调用a->A()后,a就不存在了,任何操作都是非法的。


这就不好说了,什么结果都有可能。

只是用户自己的数据没变,虚基表是系统管理的,变没变可没准。
  相关解决方案