我们来看一段代码
:
class CParent
{
char *m_Parent;
public:
CParent()
{
cout<<"Parent constructor"<<endl;
m_Parent=new char[10];
}
~CParent()
{
cout<<"Parent DEconstructor"<<endl;
delete m_Parent;
}
};
class CHild:public CParent
{
char *m_CHild;
public:
CHild()
{
cout<<"CHild constructor"<<endl;
m_CHild=new char[10];
}
~CHild()
{
cout<<"CHild DEconstructor"<<endl;
delete m_CHild;
}
};
int main()
{
CParent *parent;
CHild *c=new CHild;
parent=c;
delete parent;
return 0;
}
代码运行结果为:
Parent constructor
CHild constructor
Parent DEconstructor
这里hi出现内存的泄漏,因为delete parent;只是调用了parent的析构函数,没有去掉用CHild的析构函数,那么CHild中的内存得不到释放,会造成内存泄漏。
将~CParent() 改为 virtual ~CParent() 之后的显示为:
Parent constructor
CHild constructor
CHild DEconstructor
Parent DEconstructor
这也是 MFC中Cbject得中的析构函数为虚函数的原因