美文网首页
3.1继承时的对象模型

3.1继承时的对象模型

作者: tomchan | 来源:发表于2015-10-06 17:37 被阅读38次

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

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

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

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

    继承时的内存模型

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

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

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

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

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

    相关文章

      网友评论

          本文标题:3.1继承时的对象模型

          本文链接:https://www.haomeiwen.com/subject/ytsgcttx.html