在下面的代码中,为什么Parent的大小与Child的大小相同(尽管Child添加了成员变量)?另一个奇怪的行为:如果我注释掉定义 b 的行,则 Child 的大小保持不变,但如果我添加另一个变量 (int b, c;),则 sizeof 给出 24。 非常感谢解释为什么会发生这种情况(:
#include <iostream>
class Parent {
int a = 0;
public:
virtual void foo() {}
};
class Child : public Parent {
int b; // this line doesn't affect the output
};
int main() {
std::cout << sizeof(Parent) << ", " << sizeof(Child);
return 0;
}
// Output is : 16, 16
注意:这是我第一次在这里提问,所以如果不清楚或表述不当,请随时要求我编辑。
这是由于虚函数的存在
foo
:
virtual void foo() {}
编译器生成一个指向虚拟函数地址表的指针,在您的系统中,该指针等于
8
,而 sizeof( int )
等于 4
。因此,由于父类的分配,其大小等于16
。
包含父类 { int a = 0;公共:虚拟无效foo(){}};子类:公共父类 { int b; // 此行不影响输出 }; int main() { std::cout << sizeof(Parent) << ", " << sizeof(Child); return 0; }