如果要用继承,那么一定要让析构函数是虚函数
如果一个函数是虚函数,那么在子类中也要是虚函数
#include iostream.h
class Base
{
public:
Base(){ cout<<"Constructing Base";}
// this is a destructor:
~Base(){ cout<<"Destroying Base";}
};
class Derive: public Base
{
public:
Derive(){ cout<<"Constructing Derive";}
~Derive(){ cout<<"Destroying Derive";}
};
void main()
{
Base *basePtr = new Derive();
delete basePtr;
}
输出:
Constructing Base
Constructing Derive
Destroying Base
虚函数对比
class Base
{
public:
Base(){ cout<<"Constructing Base";}
// this is a virtual destructor:
virtual ~Base(){ cout<<"Destroying Base";}
};
输出:
Constructing Base
Constructing Derive
Destroying Derive
Destroying Base
请注意,派生类析构函数将在基类之前调用。
因此,现在您已经了解了我们为什么需要虚拟析构函数以及它们如何工作。
类设计的一个重要设计范例是,如果一个类具有一个或多个虚拟函数,则该类也应该具有一个虚拟析构函数。
参考链接:
http://www.programmerinterview.com/c-cplusplus/virtual-destructors/