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

标签 c++ oop virtual-functions 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");}
};

在上面的类层次结构中, 一些书说,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/

相关文章:

c++ - 如何快速发送大量 POST 请求

C++:方法重载的奇怪行为

c++ - 如果调用非虚拟实现,是否会通过 vtable 进行函数分派(dispatch)?

c++ - 使用yaml-cpp错误解析YAML文件

c++ - 如何从析构函数调用 const 成员函数

C++:函数模板的实例化有问题

c++ - 我应该从静态成员方法返回什么类型的指针

java - C++:按值传递对象的原因

JavaScript参数依赖类继承

c# - 虚拟方法比调用非虚拟方法慢