3.1继承时的对象模型

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

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

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

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

继承时的内存模型

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 结构体和共同体的区别。 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体uni...
    breakfy阅读 6,471评论 0 22
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 8,024评论 0 3
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,153评论 1 51
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,948评论 0 62
  • 马尔克斯第一次也是唯一一次见到海明威是在他28岁的时候。当时像许多作家一样,他在巴黎从事写作。虽然出版了一本书,也...
    上坡路19号阅读 2,817评论 0 1

友情链接更多精彩内容