著:Stanley B. Lippman 侯捷译 Inside the C++ Object Model
第一章:关于对象(Object Lessons)
C++对象模型,了解到也是一个演变的过程,C++对象中包含了以下内容:(data members) non-static data,static data(const),以及(member functions):static,non-static,virtual
发展的主要过程主要集中于如何存储data 和 function,寻求时间和空间的最高效;
第一种模型 简单对象模型,A Simple Object Model
把所有的data和function的地址存储在class中(即都是pointer-to-member),相对比较灵活,class大小固定,间接引用;但由于间接引用会带来访问时间开销;
而object生成中只需要指向base class即可,并对相应数据指针覆盖即可; (总结:把所有的data和function都以virtual的形式间接访问,缺点data对象带来访问开销)
第二种模型:表格驱动对象模型 A Table-driven Object Model
在第一种模型基础上改进,将data member和function member放到独立的table中,这样在class中仅需要保存两个ptr即可,减少了空间。没有实际应用,但member function table被应用virtual functions设计中;
第三种: C++对象模型 The C++ Object Model
吸收上两种模型的精华,对内存空间和存取时间做了优化,对class中各种类型进行了差异性处理。分别如下:object中仅存储non-static data和一个vptr指针,该指针指向一个vtable(包含所有的虚拟函数指针), static-data 和 function 独立于对象存在。
可以支持单继承和多重继承,virtual可以在多重继承*享继承,仅保留父类的一份对象空间。
优势:data member通过直接访问,提高访问时间
缺点: base class members的任何改变,都会影响到derived class members。