我正在修改C ++概念,但我遇到了一个非常简单的代码
#include <iostream>
using namespace std;
class foo {
public:
//int i;
void virtual foobar()
{
cout << "foobar\n";
}
};
int main()
{
foo f;
cout << sizeof(f) << endl;
//cout << sizeof(f.i) << endl;
return 1;
}
上述代码的输出为8 但是当我从代码中删除评论时 输出为16和4
我不明白当班级没有成员变量时,VPTR大小为8但是在添加变量大小后变为12。
答案 0 :(得分:3)
您正在开发一个指针与8个字节对齐的平台。由于虚拟表指针通常是对象布局中的第一件事,因此它也必须对齐到8个字节。因此在int
成员之后插入填充4个字节,这就是为什么你得到16的大小(vf表指针为8个字节,int为4个字节和4个填充字节)。