1 Star 0 Fork 0

huyi / TechCPP

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
同一个类的两个对象的虚函数表是如何维护的?.md 1.30 KB
一键复制 编辑 原始数据 按行查看 历史
葛昆仑 提交于 2023-12-07 20:00 . update: 2 articles

虚函数表是由类维护的,而非单独为每个对象维护的。虚函数表的维护发生在编译期和链接期间,编译器和链接器会处理虚函数表的创建和初始化。运行时,当调用对象的虚函数时,程序会通过对象的虚函数表指针(vptr)来查找相应函数的地址,并执行对应的函数。

以下是虚函数表的工作流程的简化视图:

  1. 类定义:编译器检测到类中有虚函数声明,为该类创建一个虚函数表。
  2. 类实例化:当创建类的对象时,每个对象在内存中都会包含一个指向类虚函数表的指针(vptr)。同一个类的所有对象共享同一虚函数表,不会为每个对象单独创建新的虚函数表。
  3. 虚函数调用:当通过基类指针或引用调用虚函数时,程序使用vptr找到虚函数表,然后通过表中的适当条目来定位要调用的函数地址,从而实现多态性。

因此,同一个类的两个对象使用相同的虚函数表,但它们各自持有自己的指向这个虚函数表的指针。如果派生类重写了某些虚函数,那么它将拥有自己的虚函数表,其中包含了重写函数的新地址,以及未被重写函数的原始地址。派生类对象的虚函数表指针将指向这个派生类特有的虚函数表。

1
https://gitee.com/hylhm/TechCPP.git
git@gitee.com:hylhm/TechCPP.git
hylhm
TechCPP
TechCPP
master

搜索帮助