nonstatic data members存储在每一个object中,而static data members以及所有的function members被独立存储在所有object之外。
对虚函数的支持主要通过以下几点完成的:
所有包含虚函数或者继承自有虚函数基类的class都会有一个virtual table,该虚函数表存储着一堆指向该类所包含的虚函数的指针。
每个class所关联的type_info object也是由virtual table存储的,一般会存在该表格的首个slot,type_info用于支持runtime type identification (RTTI)。
如果将C++对象模型应用在Point Class上,结构图如下:

优点:空间和存取效率高,所有static data members以及所有的function members被独立存储在所有object之外,可以减少每个object的大小,而nonstatic data members存储在每一个object中,又提升了存取效率。
缺点:如果应用程序的代码未曾更改,但所用到的class的nonstatic data members有所更改,那么那些代码仍然需要全部重新编译,而前面的表格驱动模型在这方面提供了较大的弹性,因为他多提供了一层间接性,当然是付出了时间和空间上的代价。
在加上继承情况下的对象模型
C++支持单继承、多继承、虚继承,下面来看下base class实体在derived class中是如何被构建的。
简单对象模型中可以通过derived class object中的一个slot来存储base class subobject的地址,这样就可以通过该slot来访问base class的成员。这种实现方式的主要缺点是:因为间接性的存储而导致空间和存取时间上存在额外负担;优点是:derived class的结构不会因为base class的改变而改变。
表格驱动对象模型中可以利用一个类似base class table的表格来存储所有基类的信息。该表格中存储一系列slot,每个slot存储一个base class的地址。这种实现方式的缺点是:因为间接性的存储而导致空间和存取时间上存在额外负担;优点是:一是所有继承的class都有一致的表现形式(包含一个base table指针,指向基类表)与基类的大小和数目没有关系,二是










