可能重复: 理解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;
}查看编译器生成的虚拟表,
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。
发布于 2012-10-27 13:40:49
我认为第一项或0处的条目是对顶部指针的偏移量。
请参阅以下相关堆栈溢出问题
从源代码中查看剩余的-fdump-类层次结构,大多数类似乎都有第一个条目为(int (*)(...))0,唯一没有将其作为第一个条目的类将其作为第二个条目,并且在流的C++ STL类层次结构中,第一个条目作为对父类的偏移。
在相关问题中,给出了一些vtable示例的死链接,我相信该链接的一个活版本是可用的这里。
描述vtable结构的另一个有用的资源是这里。
https://stackoverflow.com/questions/13100302
复制相似问题