是否可以访问多态类中的虚拟指针

时间:2011-03-18 23:57:24

标签: c++

是否可以访问虚拟指针,即指向多态类中虚拟表的指针。

3 个答案:

答案 0 :(得分:3)

一般情况下,不,该标准与虚拟调度的实现方式无关,因此只要涉及virtual类,甚至可能没有vptr和vtable。

vptr是一个实现细节,您应该查看您的编译器文档以检查是否有文档化的方法来访问它(但我从未听说过编译器内置函数来执行此操作),否则您必须查看程序集输出以确定其位置。

出于好奇,你为什么需要访问vptr?

答案 1 :(得分:2)

没有可移植的方法来实现这一点,因为多态和动态调度的实现是特定于实现的。

答案 2 :(得分:1)

许多编译器将vtable指针放在类的开头,因此您可以通过将类指针转换为指针指针并检索它来获取它。

但是正如已经指出的那样,你必须要知道这是特定于实现的,所以如果你选择不同的编译器,不同的编译器版本或不同的目标平台,它可能会随机破坏 - 如果你很幸运,它会崩溃。如果没有,那么在某个地方会有一个微妙的错误,你会花很多时间尝试调试。

当你在它上面使用虚拟继承时,这会加倍。