考虑下面的代码:
#...
class A {};
class B: public A{};
class C: virtual public A{};
class D: virtual public C{};
// No More Classes
...
int _tmain(int argc, _TCHAR* argv[]) {
cout<<sizeof(A)<<" ";
cout<<sizeof(B)<<" ";
cout<<sizeof(C)<<" ";
cout<<sizeof(D)<<".";
...
}
输出:1 1 4 8。
问题:
- sizeof(A) = 1byte,这个位置对编译器/我们来说很重要。
- 当实际上没有任何东西存在时,为什么编译器会费心在 C 类对象中添加 vptr。
- 如果我们没有任何虚函数,编译器会向派生对象添加一个额外的 vptr。
*。这是我的第一个问题,如果您发现任何错误,请纠正我。