[读书笔记] 深入探索C++对象模型-第三章 Data语义学(中)

继续整理第三章的内容(以下部分图片来自于原书):

1. 在只有继承没有多态的情况下,子类是的内容就是父类加上子类特有的数据成员,例如,对于如下两个类,Point2d和Point3d,后者公有继承自前者,此时的数据布局如下所示:

[读书笔记] 深入探索C++对象模型-第三章 Data语义学(中)_第1张图片

在某些情况下,把一个类分解成多层,可能会导致类所占用空间的膨胀,例如,如下类,算上对齐操作大小为8 (4 + 1 + 1+1 +(1对齐)):

[读书笔记] 深入探索C++对象模型-第三章 Data语义学(中)_第2张图片

而如果相同的数据(val,c1,c2,c3),被分散的放入继承体系之中,现在一个包含所有这些数据的类Concrete3的大小就膨胀到了16,这是因为上面的无继承的类设计中,只有一个字节被用来对齐,而此种继承体系之下,有9个字节被用来对齐:

你可能感兴趣的:(技术书籍阅读笔记,C++对象模型)