虚函数、虚析构函数、虚表

1、虚函数

虚函数作用:用于实现动态联编,让程序选择特定类型设计的方法(个人定义

基本特点:非构造函数;

基类的为虚函数,子类重新定义的为虚函数。

2、虚析构函数(示例

虚析构函数的作用 : 基类采用virtual虚析构函数是为了防止内存泄漏。(也有人说除非不当做基类)

场景解释:如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存泄漏。所以,为了防止这种情况的发生,C++中基类的析构函数应采用virtual虚析构函数。

3、虚表(virtual function table ,vtbl)

虚表:在有虚函数的类中,隐藏的 一个指向虚函数地址数组的指针 的成员。(个人定义

特点:每个类都会创建一个虚表,根据是否添加新的虚函数决定是否会在保存的原本的虚表地址后方添加地址成员,根据是否重新定义虚函数,决定是否更改新的地址;

每个虚函数的调用都会进行查表;

4、动态联编和静态联编

静态联编效率较高,原因是:动态联编的时候需要使用虚表,虚表需要在表中查找对应虚函数的地址。

参考文章:虚表的详细解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma_Hong_Kai

微信 2936729162

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值