),然后放置基类的数据成员,最后放置继承类的数据成员,放置方法仍然遵循之前所讲的对齐和填充规则,所以我们仍然可以套用公式来计算cv2的大小:
首先对齐各个成员:
sizeof’(cv2, 0) = 0...多继承
C++还支持多继承特性,一个类型可以继承于多个基类(假设基类分别为B1, B2, …, Bn),其中每个基类都可能有成员数据及虚函数表,继承类I也必须能够无缝的向下转形为任一基类,其内存布局的一般规则如下...接着放置B2的数据成员,并逐个执行内存对齐
e. 对接下来的基类Bi重复c和d两个步骤,直到 Bn
f. 接着放置I自身的数据成员,并逐个执行内存对齐
g....,相反,GCC”合并”了虚函数表指针(vptr)和虚基类表指针(vbptr),
或者说GCC只使用了vptr来实现虚函数的重载和虚基类的索引,方法是通过正向索引vptr来定位虚函数(vptr + offset...(即空基类优化),所以实际上s8的大小一般为4,当然,如果你把此时的空类型看做一种大小为0,对齐值为1的结构的话,仍然可以使用之前的公式计算得出正确答案:
首先对齐各个成员:
sizeof’(s8, 0