3.1继承时的对象模型

没有继承时对象内存的分布情况。这时的内存模型很简单,成员变量和成员函数会分开存储:

对象的内存中只包含成员变量,存储在栈区或堆区(使用new创建对象);

成员函数与对象内存分离,存储在代码区。

当存在继承关系时,内存模型会稍微复杂一些。

继承时的内存模型

有继承关系时,派生类的内存模型可以看成是基类成员变量和新增成员变量的总和,所有成员函数仍在另外一个区域——代码区,由所有对象共享。

成员变量按照派生的层级依次排列,新增成员变量始终在最后。

有成员变量遮蔽时的内存分布

当基类A、B的成员变量被遮蔽,仍然会留在派生类对象obj_c的内存中,C类新增的成员变量始终排在基类A、B的后面。

总结:派生类的对象模型中,会包含所有基类的成员变量。这种设计方案的优点是访问效率高,能够在派生类对象中直接访问基类变量,无需经过好几层间接计算。

你可能感兴趣的:(3.1继承时的对象模型)