1
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() 指针在哪里?

4

1 回答 1

3

vtable 是实现定义的。您的书可能与您的目标架构不匹配。您应该参考您的系统/架构的 ABI 以获取此类信息。这种规范的一个例子:http ://refspecs.linux-foundation.org/cxxabi-1.83.html#vtable 。请注意,本规范(针对 Linux)没有提及首字母缩略词“VMT”或“CIR”(同样,因为它是实现定义的)。

于 2013-05-18T06:25:42.363 回答