为什么析构函数要定义为虚函数

来源:互联网 发布:java json解析string 编辑:程序博客网 时间:2024/05/01 14:46
#include <iostream>using namespace std;class A{public:     A()    {        cout << "我是A的构造函数" << endl;    }    virtual ~A()//~A()    {        cout << "我是A的析构函数" << endl;    }    void fun()    {        cout << "-------------我是分割线------------" << endl;    }protected:private:};class B :public A{public:    B()    {        cout << "我是B的构造函数" << endl;    }    ~B()    {        cout << "我是B的析构函数" << endl;    }};int main(){    B b;    A *p = new B;    p->fun();    delete(p);    system("pause");    return 0;}

当A的析构函数声明为虚函数时,代码运行结果如下:
这里写图片描述
当A的析构函数为普通函数时,代码运行结果如下:
这里写图片描述
对比可得出,将基类的析构函数定义为虚函数后,利用delete删除一个指向派生类的对象指针时,系统会自动调用基类和派生类的析构函数。而没有定义为虚函数时,系统只会调用基类的析构函数。

1 0