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;

相关文章:

猜你喜欢
  • 2021-08-26
  • 2021-11-17
  • 2021-12-01
  • 2021-07-30
  • 2022-12-23
  • 2021-12-23
相关资源
相似解决方案