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,但是又都没有写析构函数,所以都调用基类的析构函数,层层释放。

浙公网安备 33010602011771号