自动调用基类部分的西沟函数对基类的设计有重要影响。
删除指向动态分配对象的指针时,需要运行西沟函数在释放对象的内存之前清楚对象。处理继承层次中的对象时,指针的静态类型可能与被删除对象的动态类型不同,可能会删除实际指向派生类对象的基类类型指针。
如果删除基类指针,则需要运行积累西沟函数并清楚基类成员,如果对象实际是派生类型的,则没有定义该行为。要保证运行适当的析构函数,基类中的析构函数必须为虚函数:
Code
class item_base
{
public:
// no work, but virtual destructor needed
// if base pointer that points to a derived object is ever deleted
virtual ~item_base() {}
};
item_base *itemP = new item_base; // same static and dynamic type
delete itemP; // ok: destructor for item_base called
itemP = new Bulk_item; // ok: static and dynamic types differ
delete itemP; //