Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does every object of virtual class have a pointer to vtable?

Does every object of virtual class have a pointer to vtable?

Or only the object of base class with virtual function has it?

Where did the vtable stored? code section or data section of process?

like image 237
MainID Avatar asked Feb 18 '09 15:02

MainID


1 Answers

All classes with a virtual method will have a single vtable that is shared by all objects of the class.

Each object instance will have a pointer to that vtable (that's how the vtable is found), typically called a vptr. The compiler implicitly generates code to initialize the vptr in the constructor.

Note that none of this is mandated by the C++ language - an implementation can handle virtual dispatch some other way if it wants. However, this is the implementation that is used by every compiler I'm familiar with. Stan Lippman's book, "Inside the C++ Object Model" describes how this works very nicely.

like image 144
Michael Burr Avatar answered Oct 22 '22 13:10

Michael Burr