虚析构函数

基类的析构函数为什么要定义为虚函数?
基类指针指向派生类对象实现多态,如果基类的析构函数没有定义成虚函数,在删除基类的指针时,只会调用基类析构函数,而不会调用派生类的析构函数,那么派生类的成员就得不到释放,内存释放不完全导致内存泄露。

复制代码
#include <iostream>
using namespace std;

class Base
{
public: 
    Base()
    {
        cout << "Base()" << endl;
    }
    // 如果~Base()没有定义为虚析构函数,输出将没有"~Driver"
    virtual ~Base()
    {
        cout << "~Base()" << endl;
    }
};

class Driver : public Base
{
public: 
    Driver()
    {
        cout << "Driver()" << endl;
    }
    ~Driver()
    {
        cout << "~Driver()" << endl;
    }
};

int main(int argc, char *argv[])
{
    Base *p = new Driver;
    delete p;

    return 1;
}

输出:
Base()
Driver()
~Driver()
~Base()
复制代码

 

posted @   jason8826  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示