1234567891011121314151617181920
class Base{public: int a; char b;}; class Derived : public Base{public: char d;}; int main(){ cout << sizeof(Base) << endl; //8 cout << sizeof(Derived) << endl; //12 return 0;}
对于Base:a4字节,b1字节,3字节对齐,共8字节。
对于Derived:d并没有和b存在一起,而是在3字节之外(Base对象内存单元之后,即8字节之后),再加上3字节对齐,共12字节。
这样做是有目的的,如将基类的对象复制给派生类对象时,这样分配内存不会对某个派生类对象成员造成未知的覆盖。
将b对象拷贝到d对象。
Derived d;Base b;Base *pb = &b;Base *pd = &d;*pd = *pb;