读书人

继承动态联编下的对象析构解决方法

发布时间: 2012-05-10 16:02:39 作者: rapoo

继承,动态联编下的对象析构
#include <iostream>
using namespace std;
class OB
{
public:
OB(){cout<<"基类构造!\t:"<<this<<endl;}
virtual void print(){cout<<"基类pring函数执行...\t"<<this<<endl;}
~OB(){cout<<"基类析构!\t:"<<this<<endl;}
};
class OBA:public OB
{
public:
OBA(){cout<<"A类构造!\t:"<<this<<endl;}
void print(){cout<<"A类pring函数执行...\t"<<this<<endl;}
~OBA(){cout<<"A类析构!\t:"<<this<<endl;}
};
class OBB:public OB
{
public:
OBB(){cout<<"B类构造!\t:"<<this<<endl;}
void print(){cout<<"B类pring函数执行...\t"<<this<<endl;}
~OBB(){cout<<"B类析构!\t:"<<this<<endl;}
};
class OBC:public OBA,public OBB
{
public:
OBC(){cout<<"C类构造!\t:"<<this<<endl;}
void print(){cout<<"C类pring函数执行...\t"<<this<<endl;}
~OBC(){cout<<"C类析构!\t:"<<this<<endl;}
};
void main()
{
OBA * p = new OBC;
p->print();
delete p;
p = NULL;
}

删除P指针后,只析构了A类和和基类,然而在构造时B类也会随着C类而构造,且内存地址不同.但在删除堆中空间后B类未被析构.
 望高手详解原理.这样的情况是否正常.B类是否会内存泄露.如果会那么如何避免.谢谢

[解决办法]
当基类要被继承时记得将基类的虚函数设置为虚函数
[解决办法]
析构函数没虚啊。
[解决办法]
只有把西沟函数设置为虚函数,在delete的时候就会自动调用它

读书人网 >C++

热点推荐