何为C++对象模型?
C++对象模型可以概括为以下2部分:
1. 语言中直接支持面向对象程序设计的部分
2. 对于各种支持的底层实现机制
引言
现在有一个Point类,声明如下:
class Point {
public:
Point(float xval);
virtual ~Point();
float x() const;
static int PointCount();
protected:
virtual ostream& print(ostream &os) const;
float _x;
static int _point_count;
};
这个类在机器上是通过什么模型来表示的呢?下面就介绍三种不同的实现方式。
1. 简单对象模型
简单对象模型名副其实,十分简单。在简单对象模型中,一个 object是由一系列slots组成,每个slot相当于一个指针,指向一个member,memebers按照声明的顺序与slots一一对应,这里的members包括data members和function members。
如果将简单对象模型应用在Point Class上,结构图如下:

优点:十分简单,降低了编译器设计的复杂度。
缺点:空间和时间上的效率降低。由于所有member都对应一个slot指针,所以每个object在空间上额外多出:member's number 乘以指针大小的空间。同时由于访问object的每个member都需要一次slot的额外索引,所以在时间的效率也会降低。
2. 表格驱动对象模型
表格驱动对象模型将member data和member function分别映射成两个表格member data table和function member table,而object本身只存储指向这两个表格的指针。 其中function member table是由一系列的slot组成,每个slot指向一个member function; member data table则直接存储的member data本身。如果将表格驱动对象模型应用在Point Class上,结构图如下:

优点:采用两层索引机制,对object变化提供比较好的弹性,在object的nonstatic data member有所改变时,而应用程序代码没有改变,这时是不需要重新编译的。
缺点:空间和时间上的效率降低,具体原因可以参考简单对象模型的缺点分析。
3. C++ 对象模型
Stroustrup










