#include <iostream>
class B
{
public:
virtual void f() {std::cout<<"HI";}
int x;
};
class A
{
public:
void f() {std::cout<<"HI";}
int x;
};
int main () {
A a;
B b;
std::cout<<sizeof(a)<<" "<<sizeof(b);
return 0;
}
输出为
4 16
我希望它长8个字节-vptr指针。但是剩下的4个字节又用来做什么呢?我发现很多forum posts(都是几年前的),人们讨论了带有vprt的类的对象长4或8个字节。我也检查了online C++ shell-输出是否相同。
似乎指向虚拟函数的指针表的指针的大小为8个字节。因此,类B与8个字节的边界对齐,因为它有4个填充字节。