[C++] Virtual Destructor
假定有如下的两个类: class Base { // some virtual methods }; class Derived : public Base { ~Derived() { // Do some important cleanup } }; 然后有下面的语句: Base *b = new Derived(); delete b; // Here's the problem! 行为未定义!!! 解决办法是将 Base 的析构函数定义为 virtual 。 当删除指针时,如果指针的对象的静态类型不同于它的动态类型,那么:静态类型必须为基类,且基类必须定义 virtual destructor,否则行为就是未定义的。 而且,如果没有将基类的析构函数定义为 virtual, 当delete指针时,只有基类的析构函数被调用,派生类的析构函数不会被调用,这会导致资源泄漏,总而言之,如果将基类用于多态,那么,基类的析构函数应该总是定义 virtual destructor。 [Effective C++] 假定有如下表示敌方目标的类,静态变量用于记录对象数目: class EnemyTarget { public: EnemyTarget() { ++numTargets; } EnemyTarget(const EnemyTarget&) { ++numTargets; }