Figure C.6 In-memory layout of objects with virtual function tables. Note that this layout
is more or less generic and is used by all compilers.class Base
{
int BaseMember1;
virtual VirtualFunc1();
}; virtual VirtualFunc2();Base Classclass Child1 : Base
{
int Child1Member1;
virtual Child1Func();VirtualFunc1();
VirtualFunc2();
};Child1 Classclass Child2 : Base
{ int Child2Member1;
VirtualFunc1();
};Child2 ClassIn-Memory Layout of
Inherited Objects
Lowest Memory
AddressHighest Memory
AddressChild2 Class InstanceBaseMember1
Child1Member1
Child2Member1Child1 Class InstanceBaseMember1Pointer to
Child1::VirtualFunc2()Pointer to
Child1::VirtualFunc1() { ... }; Child1::VirtualFunc1()Child1::VirtualFunc2() { ... };Child1 Class
vftableChild1 Class
ImplementationsPointer to BaseFunc2Pointer to BaseFunc1Child2 Class
vftableVftable PointerVftable PointerChild2::VirtualFunc1() { ... };Child2::VirtualFunc2() { Not Implemented };Child2 Class
ImplementationsChild1Member1Base::VirtualFunc1() { ... };Base::VirtualFunc2() { ... };Base Class
Implementations558 Appendix C23_574817 appc.qxd 3/16/05 8:45 PM Page 558