继承类的sizeof

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

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;

原文地址:https://www.cnblogs.com/helloweworld/p/3214083.html