问题描述
- C++中虚基类中关于内存计算的问题
-
情况一:
class D{
public:
int a;
};
class A:virtual public D{};
class B :virtual public D{};
class C:public A,public B{
public:
int a1;
};
用sizeof(C)计算出等于16;
情况二:
class D{
public:
int a;
};
class A:public D{};
class B :public D{};
class C:public A,public B{
public:
int a1;
};
用sizeof(C)计算出等于12;
情况一本人理解不了哪位大神给分析分析吧
解决方案
frank_20080215说法就不对了。不是3个a的size
#include <iostream>
using namespace std;
class D{
public:
int a;
int b;
};
class A:virtual public D{
};
class B :virtual public D{
};
class C:public A,public B{
public:
int a1;
};
int main()
{
cout << sizeof(C);
}
结果是20。
class D{
public:
int a;
};
class A:public D{
};
class B :public D{
};
class C:public A,public B{
public:
int a1;
};
int main()
{
cout << sizeof(D)<< endl;
cout << sizeof(A)<< endl;
cout << sizeof(C)<< endl;
}
结果是4 4 12
#include <iostream>
using namespace std;
class D{
public:
int a;
};
class A:virtual public D{
};
class B :virtual public D{
};
class C:public A,public B{
public:
int a1;
};
int main()
{
cout << sizeof(D)<< endl;
cout << sizeof(A)<< endl;
cout << sizeof(C)<< endl;
}
结果是4 8 16
所以看明白了么?后者是因为虚继承本身多耗费了4个字节,同时虚继承只保留了一份指向D的存储,所以是16个字节。
解决方案二:
virtual -- 关键字,继承了,是深拷贝。class C的size = 4 + 3*4 = 16
一个a1 的size + 3个a的size;
没有virtual,相同时,共享: class C 的size= 4 + 2*4 =12
一个a1 的size + 2个a的size;
因为class C继承 A,B,共享了一个a的size
时间: 2024-10-31 23:34:08