深入探索C++对象模型 读书笔记

来源:互联网 发布:黄牛抢票软件个人版 编辑:程序博客网 时间:2024/06/02 03:18

3.2 数据成员的布局

1.对象的数据成员不一定连续存储,中间可能穿插对齐字节


3.4 继承 与数据成员

在C++继承模型中,一个derived class object所表现出来的东西,是其自己的members加上其base classes members的总和,至于derived class members和base classes members的排列顺序在C++ Standard并未强制规定,对于大部分编译器来说,base class membes总是先出现,但是属于virtual base class的除外.
1) 单一继承不含多态
一般而言,单一无多态的继承并不会增加空间或是存取时间上的额外负担,但是把一个class分解为两层或是多层,有可能会为了"表现class体系之抽象化"而膨胀所需的空间,C++语言保证"出现在derived class 中的base class subobject保持其完整原样性",所以,有可能因为alignment填补的空间在derived class保持其原来的大小,而导致derived class的空间膨胀。
class A{int i;char c1;};class B : public A{char c2;};
<span style="white-space:pre"></span>如上代码,sizeof(A)等于8(3个字节填充),sizeof(B)等于12,即派生类对象的大小等于:基类的大小+派生类的成员+字节填充。

0 0
原创粉丝点击