虚拟表的说明

Ano*_*non 9 c++ gcc g++ vtable

可能重复:
了解vtable条目

使用g ++版本4.6.3,64位机器.我知道编译器可以随心所欲地实现虚函数.我想知道这里发生了什么.

我的课:

#include <iostream>
class test
{
    public:
    virtual void func(){std::cout<<"in class test";}
};

int main()
{
    test obj;
    obj.func();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

Vtable for test
test::_ZTV4test: 3u entries
0     (int (*)(...))0 (<---- what is this? )
8     (int (*)(...))(& _ZTI4test)
16    (int (*)(...))test::func
Run Code Online (Sandbox Code Playgroud)

在偏移8处,它是RTTI

在偏移16处,它是虚函数的入口.

我的问题是为什么在偏移0处有空的条目,或者换句话说第一次进入的目的是什么?

PS我认为这可能与对齐有关,但后来我添加了更多的虚函数,但RTTI条目仍然是偏移8.

App*_*234 8

我相信第一个条目或0的条目是顶部指针的偏移量.

请参阅以下相关的stackoverflow问题

从源代码中查看余数-fdump-class-hierarchy,大多数类看起来都是第一个条目(int (*)(...))0,唯一没有它作为第一个条目的类将它作为第二个条目并将第一个条目作为第一个条目给定流的C++ STL类层次结构的父类的偏移量.

在相关问题中给出了一些vtable示例的死链接,我相信这个链接的实时版本可以在这里找到

另一个详细介绍vtable结构的有用资源就在这里.