关于c ++中虚方法表的一些问题

时间:2013-05-18 06:16:28

标签: c++ oop virtual-method dynamic-binding

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");}
};

在上面的Class层次结构中, 一些书说,C.dud()的指针在C的CIR中的A和C的VMT中。

但是在使用visual studio 2010进行调试时,C.dud()没有任何条目......

VMT的c.dud()指针在哪里

1 个答案:

答案 0 :(得分:3)

vtable是实现定义的。您的图书可能与您的目标架构不符。您应该参考您的系统/架构的ABI获取此类信息。这种规范的一个例子:http://refspecs.linux-foundation.org/cxxabi-1.83.html#vtable。请注意,此规范(适用于Linux)未提及首字母缩写词" VMT"或" CIR" (再次,因为它是实现定义的)。