【发布时间】:2023-03-22 12:50:02
【问题描述】:
这是我的代码:
#include <iostream>
using namespace std;
class MyClass{
int mem1;
float mem2;
};
class MyKids: public virtual MyClass{
int cmem1;
int cmem2;
};
class MyLawKids:public virtual MyClass{
int lmem1;
};
class MyGrands:public MyKids, public MyLawKids{
int gmem1;
};
int main(){
cout << "\n Size of MyClass: " << sizeof(MyClass) << " bytes" << endl ;
cout << " Size of MyKids: " << sizeof(MyKids) << " bytes" << endl ;
cout << " Size of MyLawKids: " << sizeof(MyLawKids) << " bytes" << endl ;
cout << " Size of MyGrands: " << sizeof(MyGrands) << " bytes" << endl ;
return 0;
}
结果:
Size of MyClass: 8 bytes
Size of MyKids: 20 bytes
Size of MyLawKids: 16 bytes
Size of MyGrands: 32 bytes
Process returned 0 (0x0) execution time : 0.094 s
Press any key to continue.
我认为 MyGrands 类的大小应该是 36 字节 = (sizeof(MyKids + MyLawKids + int gmem1) - 4 字节的虚拟表指针)。
为什么我的结果显示“MyGrands 的大小:32 字节”?
【问题讨论】:
-
stackoverflow.com/questions/119123/…(涉及填充,不同的编译器或平台可能导致不同的结果)
-
虚拟继承,你可以(可能)不用的多重继承。
-
顺便说一句,您观察到的大小差异只是虚拟继承的结果。任何关于虚拟继承的文章都应该包含对你看到的效果的解释
标签: c++ class inheritance virtual sizeof