假设我有一些类,其中唯一的成员是int.如果它不在类中,则int本身就是4个字节.该类是否占用超过4个字节的内存(在C++中)?
关于一个类最终结束的决定是特定于实现的,并且取决于许多不同的因素.有时,由于结构和类填充,类可能最终大于其成员的大小.如果你的类中有任何虚函数,那么你通常会在类的前面最后添加一个虚函数表指针(vtable指针),这会增加一些空间.并且完全有可能编译器可能只是因为它会让你的类大于它的成员的大小,如果它认为它会以某种方式帮助(或者如果你有一个懒惰的编译器!)
在你的情况下,使用一个32位整数,如果类最终大于整数本身,我会感到惊讶,因为你没有使用任何虚函数,也没有任何成员插入填充字节之间.但是,您不一定要跨系统依赖此.
如果您正在处理一个应用程序,其中您的类与字段大小相同是绝对必要的 - 例如,如果您正在读取原始字节并希望将它们重新解释为类对象 - 您可以使用a static_assert来检查为了这:
class MyClass {
...
};
static_assert(sizeof(MyClass) == sizeof(int), "MyClass must have the same size as an integer.");
Run Code Online (Sandbox Code Playgroud)
许多编译器都有自定义选项(通常通过#pragma指令),您可以调整这些选项以确保按照您喜欢的方式调整类的大小,因此您也可以考虑阅读.