C ++(虚拟)功能表

时间:2012-05-09 21:58:08

标签: c++ oop

C ++ vtable是否仅用于确定在对虚拟函数进行调用时应执行哪部分代码,还是在运行时具有其他用途?

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

2 个答案:

答案 0 :(得分:4)

某些实现将指向RTTI代码(typeiddynamic_cast,...)的信息的指针放在vtable的一个插槽中(有关Itanium ABI,请参阅此处) g ++ ABI的基础。)

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

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

答案 1 :(得分:0)

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