2

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

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

4

2 回答 2

4

一些实现将指向 RTTI 代码 ( typeid, dynamic_cast, ...) 使用的信息的指针放置在 vtable 的插槽中(请参阅此处有关Itanium ABI的信息,g++ ABI 是基于它的)。

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

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

于 2012-05-09T22:00:25.503 回答
0

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

于 2012-05-09T22:36:37.857 回答