C++(虚拟)功能表

C++ (Virtual) Function Table

本文关键字:功能 虚拟 C++      更新时间:2023-10-16

C++ vtable仅用于确定在调用虚函数时应执行哪一段代码,还是在运行时有其他用途?

在维基百科上,它列出了"动态调度"作为原因,但没有进一步详细介绍C++.....

一些实现将指向 RTTI 代码(typeiddynamic_cast、...)使用的信息的指针放在 vtable 的插槽中(请参阅此处了解 G++ ABI 所基于的 Itanium ABI)。

(实际上,如果您阅读安腾 ABI 规范,它会稍微复杂一些,但这是一般想法)

此外,正如您从链接文档中看到的那样,还有更多的东西可以访问基类的数据,在调用基类方法时执行指针调整,...,主要是"复杂"对象层次结构(多重继承,虚拟基类等)中需要的东西,因为在经典的单继承场景中,派生类的布局很简单,不需要所有这些大惊小怪。

C++ vtable 只是函数指针的查找表。 任何特定的C++实现都可以将 vtable 用于其他事情;但这是特定于实现(和版本)的。 依靠 vtable 来调用虚拟方法以外的任何东西C++是一个非常糟糕的主意。