我正在修改 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。
您正在一个指针与 8 字节对齐的平台上工作。由于虚拟表指针通常是对象布局中的第一个元素,因此它也必须与 8 字节对齐。所以在后面插入填充4个字节int
成员,这就是为什么你得到 16 的大小(8 个字节用于 vf 表指针,4 个字节用于 int 和 4 个填充字节)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)