C++虚函数实现机制笔记
注意:下面讨论的类均含虚函数。
每个(含虚函数)类都有一个虚表,表中的每一项都指向一个虚函数。
同时,编译器为类添加一个指针vptr,vptr是指向虚表的虚指针。
程序实际运行虚函数时,先通过对象的虚指针找虚表,然后再找虚函数地址。
派生类继承父类的虚表、虚指针。若派生类的虚函数有变动,则虚表中相应项的地址指向派生类函数。
可以用sizeof()、&a,来观察内存结构。
类内存结构
先指向虚表的虚指针,然后成员变量。
总结
为了实现虚函数的动态绑定:
1、编译器底层为每个有虚函数的类引入一个虚函数表格(vtable)。
2、按类中声明的虚函数顺序依次向虚表存放虚函数地址。
3、编译器底层为每一个类对象附加一个指向虚表的虚指针(vptr)。
参考
C++中虚函数的实现机制
深度搜索C++对象模型