是否可以访问虚拟指针,即指向多态类中虚拟表的指针。
答案 0 :(得分:3)
一般情况下,不,该标准与虚拟调度的实现方式无关,因此只要涉及virtual
类,甚至可能没有vptr和vtable。
vptr是一个实现细节,您应该查看您的编译器文档以检查是否有文档化的方法来访问它(但我从未听说过编译器内置函数来执行此操作),否则您必须查看程序集输出以确定其位置。
出于好奇,你为什么需要访问vptr?
答案 1 :(得分:2)
没有可移植的方法来实现这一点,因为多态和动态调度的实现是特定于实现的。
答案 2 :(得分:1)
许多编译器将vtable指针放在类的开头,因此您可以通过将类指针转换为指针指针并检索它来获取它。
但是正如已经指出的那样,你必须要知道这是特定于实现的,所以如果你选择不同的编译器,不同的编译器版本或不同的目标平台,它可能会随机破坏 - 如果你很幸运,它会崩溃。如果没有,那么在某个地方会有一个微妙的错误,你会花很多时间尝试调试。
当你在它上面使用虚拟继承时,这会加倍。