C++虚函数的内存管理

来源:互联网 发布:阿里云备案网站名称 编辑:程序博客网 时间:2024/06/11 17:37
这几天在复习多态性和动态绑定,看到一篇不错的博文:
https://blog.twofei.com/496/
这里记录一下。

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