class A {
public :
int a;
virtual void fun() {}
virtual void init() {}
};
class B {
public :
int b;
virtual void sum() {}
};
class C : public A, public B{
public :
int c;
virtual void dud() {
printf("ccc");}
};
在上面的类层次结构中, 一些书说,C.dud() 的指针在 C 的 CIR 中的 A 和 C 的 VMT 中。
但是当使用 visual studio 2010 进行调试时,任何地方都没有 C.dud() 的条目...
VMT 的 c.dud() 指针在哪里??
最佳答案
vtable 是实现定义的。你的书可能不符合你的目标架构。您应该引用系统/架构的 ABI 以获取此类信息。此类规范的示例:http://refspecs.linux-foundation.org/cxxabi-1.83.html#vtable .请注意,此规范(适用于 Linux)未提及首字母缩略词“VMT”或“CIR”(同样,因为它是实现定义的)。
关于c++ - 关于c++虚方法表的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16621325/