【发布时间】:2020-03-16 12:32:33
【问题描述】:
据我所知,c++ 中类的大小取决于以下因素 -
- 所有非静态数据成员的大小。
- 数据成员的顺序。
- 是否启用了字节填充。
- 其直接基类的大小。
- 虚函数的存在。
- 继承方式(虚拟继承)。
现在我创建了如下 2 个类 -
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;
};
现在检查我看到的 A 和 B 的大小
- 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;
};
现在大小变成了
- A的大小:16
- B 尺寸:20
我似乎无法理解造成这种差异的原因。
【问题讨论】:
-
为什么 c++ 中类的大小取决于数据成员的公共/私有状态? -- 不。这些是依赖于编译器的实现细节。
-
那么你用的是什么编译器?
-
@PaulMcKenzie 实际上确实如此。该标准要求将具有相同访问权限的成员分组在一起,因此更改会改变编译器的填充策略。
-
@NathanOliver-ReinstateMonica,我不知道。您是否有机会参考相关部分?
-
@RSahu 查找它以立即输入我的答案。
标签: c++ inheritance memory