一、不含多态的继承
即基类里没有虚函数。这时候派生类成员的存取时间并没有增加,但是空间上会有浪费。比如有如下两个类
class X { int a; char b; }; class Y : public X { char c; };
一个X对象占用4+1+3(padding, 假设4字节对齐) = 8字节。而一个Y对象并不是占用 4+1+1+2(padding)=8个字节,而是占用4+1+3(padding)+1+3(padding)=12个字节。编译器之所以如此设计,是为了使派生类对象中基类对象的内存结构和原始的基类对象一致,这种一致性保证了通过指针复制对象时不出错。如果按照前一种内存布局,会产生错误,比如:


