class base
{
};
class der_1:public base
{
};
class der_2:virtual public base
{
};
int main()
{
der_1 a; //size of a is 1
der_2 b; //size of b is 4 ?? why
cout<<sizeof(a)<<endl;
cout<<sizeof(b)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对象b内部包含虚拟指针,因此其大小为4而不是1(如a).但是这个虚拟指针指向什么?
这完全取决于实现.这取决于实现如何实现动态调度/虚拟主义.这就是C++标准库提供的原因,sizeof以获得实际大小,以便您不必估计/估计它.始终使用它而不是对尺寸做出任何假设.
但是,大多数实现(全部读取)使用虚拟表和指针机制来实现此目的,您看到的额外4个字节大小用于vptr簿记.