首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-05-10 
继承,动态联编下的对象析构#include iostreamusing namespace stdclass OB{public:OB(){cout基类构

继承,动态联编下的对象析构
#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的时候就会自动调用它

热点排行