Explanation of virtual table

c++, g++, gcc, vtable

Solution

I believe the first entry or the entry at 0 the is the offset to top pointer.

See the following relevant stackoverflow question

Looking through the remainder -fdump-class-hierarchy from your source code , most classes seem the have the first entry as `(int (*)(...))0` , the only classes that don't have it as the first entry have it as the second and have the first entry as the offset to the parent class given the C++ STL class hierarchy for streams.

In the relevant question a dead link to some vtable examples is given, I believe a live version of that link is available here

Another useful resource detailing the structure of vtables is here.

Problem

Possible Duplicate: Understanding the vtable entries Using g++ version 4.6.3, 64-bit machine . I know compiler is free to implement virtual functions any way it wants. I want to know what happened here. My class: ``` #include <iostream> class test { public: virtual void func(){std::cout<<"in class test";} }; int main() { test obj; obj.func(); return 0; } ``` Looking at virtual table generated by compiler, ``` Vtable for test test::_ZTV4test: 3u entries 0 (int (*)(...))0 (<---- what is this? ) 8 (int (*)(...))(& _ZTI4test) 16 (int (*)(...))test::func ``` At offset 8 it is RTTI At offset 16 it is entry for virtual function. My question is why is there entry for NULL at offset 0 or in other words what is the purpose of first entry? P.S. I thought this could be related to alignment, but then I added more virtual functions but RTTI entry was still at offset 8.

Original source

Related problems