Note

xiaoxiao2026-09-01  13

 

 

C++虚函数实现机制笔记

注意:下面讨论的类均含虚函数。

 

每个(含虚函数)类都有一个虚表,表中的每一项都指向一个虚函数。同时,编译器为类添加一个指针vptr,vptr是指向虚表的虚指针。

 

程序实际运行虚函数时,先通过对象的虚指针找虚表,然后再找虚函数地址。

 

派生类继承父类的虚表、虚指针。若派生类的虚函数有变动,则虚表中相应项的地址指向派生类函数。

 

可以用sizeof()、&a,来观察内存结构。

 

类内存结构先指向虚表的虚指针,然后成员变量。

 

总结

为了实现虚函数的动态绑定:1、编译器底层为每个有虚函数的类引入一个虚函数表格(vtable)。2、按类中声明的虚函数顺序依次向虚表存放虚函数地址。3、编译器底层为每一个类对象附加一个指向虚表的虚指针(vptr)。

 

参考

C++中虚函数的实现机制深度搜索C++对象模型

 

转载请注明原文地址: https://www.6miu.com/read-5052238.html

最新回复(0)