小编J.D*_*DOE的帖子

为什么C ++中类的大小取决于数据成员的公共/私有状态?

据我所知,C ++中类的大小取决于以下因素:

  1. 所有非静态数据成员的大小。
  2. 数据成员的顺序。
  3. 是否启用字节填充。
  4. 其直接基类的大小。
  5. 虚拟功能的存在。
  6. 继承方式(虚拟继承)。

现在,我创建了两个类,如下所示:

class A{
    int a;
    short s;
    int b;
    char d;
};// kept a char at last on purpose to leave a "hole"

class B : public A{
    char c;  
};
Run Code Online (Sandbox Code Playgroud)

现在检查A和BI的大小,请参见

  • A的大小:16
  • B的大小:16

我的假设是B类中的字符c被容纳在A类中剩余的“空洞”中。

但是,令我感到困惑的是以下情况,其中我将成员公开

class A{
    public:
    int a;
    short d;
    int b;
    char s;
};

class B : public A{
    public:
    char c;
};
Run Code Online (Sandbox Code Playgroud)

现在大小变成

  • A的大小:16
  • B的大小:20

我似乎无法理解这种差异的原因。

c++ memory inheritance

21
推荐指数
2
解决办法
401
查看次数

标签 统计

c++ ×1

inheritance ×1

memory ×1