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,即派生类对象的大小等于:基类的大小+派生类的成员+字节填充。