C++语言程序设计

| 例11-26

class A
{
public:
int *a;
A() { a=new(int); }
virtual void func1(){}
virtual void func2(){}
virtual ~A() {delete a; cout<<"delete a"<<endl; }
};

class B:public A
{
public:
int *b;
B() {b=new(int); }
virtual void func1(){}
virtual void func2(){}
virtual void func3(){}
virtual ~B() { delete b; cout<<"delete b"<<endl; }
};

那么程序的运行结果正是我们所希望的：
delete b
delete a
从程序中我们还可以看到：虚析构函数的工作过程与普通虚函数不同，普通虚函数只是调用相应层上的函数，而虚析构函数是先调用相应层上的析构函数，然后逐层向上调用基类的析构函数。