C++虚析构函数
创始人
2025-05-30 07:55:19

我们首先知道构造函数在对象的生存期内只会被调用一次,并且是由系统来调用,用户不能直接调用。

但我们用户可以直接调用析构函数。

且构造函数和析构函数默认都是采取静态联编的方式。

为什么需要将析构函数定义为虚函数?

通过复制兼容性规则可知,可以使用基类指针指向派生类对象,如果使用基类指针指向动态开辟的派生类对象,由该基类指针撤销派生类对象,则必须将基类析构函数定义为虚函数,实现多态性,自动调用派生类析构函数,否则可能出现内存泄漏问题。

我们通过下面的例子来说明:

1.继承类属性没有指针类型时

问题1:

答案:此时Object类型的指针p调用的是自己类的析构函数

原因:析构函数没有定义为虚函数,此时采用的是静态联编

问题2:

答案:此时没有发生内存泄漏。

原因:我们看下面的图片

2.继承类属性有指针类型时

问题1:

答案:此时Object类型的指针p调用的是自己类的析构函数

原因:析构函数没有定义为虚函数,此时采用的是静态联编

问题2:

答案:此时发生了内存泄漏。

原因:我们看下面的图片

为了防止内存泄漏的产生,我们采取了虚析构函数的方法:

将上述代码改为:

为什么将基类析构函数设置为虚函数就可以防止内存泄漏?

原因:

结论:在实现运行时多态时,将基类析构函数设置为虚析构函数,来避免内存泄漏的产生。

相关内容

热门资讯

八分钟解决“微信金花链接房卡客... 微信金花链接是一款非常受欢迎的游戏,咨询房/卡添加微信:44858861许多玩家在游戏中会购买房卡来...
玩家必看“红豆娱乐房卡15元1... 红豆娱乐是一款非常受欢迎的游戏,咨询房/卡添加微信:44858861许多玩家在游戏中会购买房卡来享受...
玩家必看“微信平台牛牛房卡怎么... 【要素一】(KK)微信链接各大厅/房卡介绍微/44858861微信平台牛牛是一款非常火爆的游戏应用,...
一分钟讲解“卡卡大厅房卡充值”... 卡卡大厅是一款非常受欢迎的游戏,咨询房/卡添加微信:44858861许多玩家在游戏中会购买房卡来享受...
分享实测“玩微信牛牛房卡批发价... 玩微信牛牛是一款非常受欢迎的游戏,咨询房/卡添加微信:44858861许多玩家在游戏中会购买房卡来享...