C++_vptr与vtbl,虚函数与虚表

一:虚函数表指针(vptr)创建时机
vptr跟着对象走,所以对象什么时候创建出来,vptr就什么时候创建出来,也就是运行的时候。
当程序在编译期间,编译器会为构造函数中增加为vptr赋值的代码(这是编译器的行为),当程序在运行时,遇到创建对象的代码,执行对象的构造函数,那么这个构造函数里有为这个对象的vptr赋值的语句。
二:虚函数表创建时机
虚函数表创建时机是在编译期间。编译期间编译器就为每个类确定好了对应的虚函数表里的内容。
所以在程序运行时,编译器会把虚函数表的首地址赋值给虚函数表指针,所以,这个虚函数表指针就有值了。



侯捷C++面向对象高级编程part2部分
虚函数表指针以及虚函数表创建时机
本文详细阐述了C++中虚函数表(vtbl)和虚函数表指针(vptr)的创建时机。vptr在对象创建时生成,编译器会在构造函数中插入初始化vptr的代码。而vtbl则在编译期间确定,包含了类的虚函数地址。理解这两个概念对于深入理解C++的多态性至关重要。
558

被折叠的 条评论
为什么被折叠?



