首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚拟表的解释

虚拟表的解释
EN

Stack Overflow用户
提问于 2012-10-27 12:46:17
回答 1查看 2.9K关注 0票数 9

可能重复: 理解vtable条目

使用g++版本4.6.3,64位机器.我知道编译器可以任意实现虚拟函数。我想知道这里发生了什么。

我的班级:

代码语言:javascript
复制
#include <iostream>
class test
{
    public:
    virtual void func(){std::cout<<"in class test";}
};

int main()
{
    test obj;
    obj.func();
    return 0;
}

查看编译器生成的虚拟表,

代码语言:javascript
复制
Vtable for test
test::_ZTV4test: 3u entries
0     (int (*)(...))0 (<---- what is this? )
8     (int (*)(...))(& _ZTI4test)
16    (int (*)(...))test::func

在偏移量8是RTTI

在偏移量16处,它是虚拟函数的入口。

我的问题是,为什么在偏移量0处有空项,换句话说,第一个条目的目的是什么?

我认为这可能与对齐有关,但后来我增加了更多的虚拟函数,但RTTI条目的偏移量仍为8。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-27 13:40:49

我认为第一项或0处的条目是对顶部指针的偏移量。

请参阅以下相关堆栈溢出问题

从源代码中查看剩余的-fdump-类层次结构,大多数类似乎都有第一个条目为(int (*)(...))0,唯一没有将其作为第一个条目的类将其作为第二个条目,并且在流的C++ STL类层次结构中,第一个条目作为对父类的偏移。

在相关问题中,给出了一些vtable示例的死链接,我相信该链接的一个活版本是可用的这里

描述vtable结构的另一个有用的资源是这里

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13100302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档