虚析构函数的作用

  • 为什么要使用虚析构函数?
    如果有这样两个类:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class person{
    person(...);
    virtual ~person();
    virtual void show(); //具体定义就不写了,反正和派生类不一样
    };
    class student : public person{
    virtual void show();
    };
    person temp_p(...);
    student temp_s(...);
    person * temp1 = temp_p;
    person * temp2 = temp_s;

为了发挥C++多态的特性,我们一般会使用虚函数,采用基类指针或者引用来 对基类对象或者派生类对象进行操作。但是这样会有一个问题,如果析构函数不是虚函数,那么基类指针temp2结束代码段时,就只会调用指针类型(就是基类)的析构函数。如果这个基类指针指向的是派生类对象,那么派生类的析构函数就不会被调用,显然是有一定问题隐患的。
因此,使用虚析构函数可以确保正确的析构函数序列被调用。