【问题标题】:some questions about virtual method table in c++关于c++中虚方法表的一些问题
【发布时间】:2013-05-13 08:19:25
【问题描述】:
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() 指针在哪里??

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-16
      • 2021-10-12
      • 2010-10-11
      • 2015-08-13
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多