C++虚函数的内存管理

这几天在复习多态性和动态绑定,看到一篇不错的博文:
https://blog.twofei.com/496/
这里记录一下。

动态绑定实现关键就在于C++的虚函数,虚函数的内存管理由虚函数表实现,下面几张摘自博文的图很好地说明了虚函数的内存:
1、当子类没有虚函数时,直接采用父类虚函数表(虚函数表由指针vfptr指向),如果有虚函数,同名的会覆盖,不同名的接在后面[0][1]的后面。
C++虚函数的内存管理
2、如果多个父类都有虚函数,那么子类自己的虚函数接到第一个有虚函数的父类虚函数表中。
C++虚函数的内存管理
3、如果两个父类都没虚函数,则子函数自有的vfptr会放在最前面,类似地,如果base2有虚函数,那么内存排列时,base2会在base1前面(默认是按照声明顺序,但有虚函数表的优先)。
C++虚函数的内存管理
有了这些概念,关于子类各个函数调用就很容易理解了:
1、如果不是虚函数, 直接调用指针对应的基本类的那个函数
2、如果是虚函数, 则查找虚函数表, 并进行后续的调用. 虚函数表在定义一个时, 编译器就为我们创建好了的. 所有的, 同一个类, 共用同一份虚函数表.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值