下为一个虚析构函数的简单例子:
class X {
private:char *p;
public:
X(int size) { p=new char[size]; }
virtual ~X( ) {cout<<"~X"<<endl; delete[ ]p; }
};
class Y :public X {
private:
char *pp;
public:
Y(int sz1, int sz2): X(sz1)
{
pp=new char[sz2];
}
~Y( ) {cout<<"~Y"<<endl; delete [ ]pp; }
};
void main()
{
X *px=new Y(10,12);
delete px;
}
若不用虚析构函数由于px为基类指针,故不会调用派生类Y的析构函数,因此Y部分派生出的成员将不会被释放,从而造成了内存泄露。