2010.7.16 多重继承、多态等的析构问题

问题描述:有一个基类,下面有N层子类,每层都存放子类的对象。当删除一个基类对象的时候,如果保证所有对象都被析构?

假如有一个船,船上有许多设备,每个设备又有子设备,子设备又有子设备.....

该如何设计类结构呢?

设计:

     1、定义一个基类 CDeviceBase。其中定义了一个MAP,用于保存每个设备的子设备

     2、所有设备都继承自CDeviceBase,这样每个设备都有一个map ,用于保存每个设备的子设备.

 

当程序推出时,需要是否内存,每个设备的析构函数是一样的,如下:

 map<CString,CDeviceBase*>::iterator  iter;
 for(iter =DeviceMap.begin(); iter != DeviceMap.end(); iter++)
 {
  delete iter->second;
 }

     如果要每个设备的析构函数里面都加上同样的代码,太麻烦了。该如何做呢?

     设计CDeviceBase的析构函数为虚函数:

CDeviceBase::~CDeviceBase(void)
{
 map<CString,CDeviceBase*>::iterator  iter;
 for(iter =DeviceMap.begin(); iter != DeviceMap.end(); iter++)
 {
  delete iter->second;
  iter->second=NULL;
 }
}

      不需要为每个设备写析构函数。

 

实际情况:

     我在项目中new 出了一个船,船上又new 出了许多设备,每个设备又new 出了许多子设备。

     当程序退出时,我只需要delete Boat(释放船对象)就行了,所有设备,包括船,都继承自CDeviceBase,但是又都没有写析构函数,所以都调用基类的析构函数,层层释放。

posted @ 2010-07-16 17:09  pjh123  阅读(218)  评论(0)    收藏  举报