关于类的大小问题

时间:2022-12-04 17:37:43
using namespace std;

class A
{

};

class B: public virtual A
{

};

class C: public virtual A
{

};

class D: public virtual B,public virtual C
{

};

void main()
{
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
cout<<sizeof(D)<<endl;
}

我在VC6里面运行过,大小分别是1,4,4,12,我想知道这些值是怎么来的?尤其是D的大小

8 个解决方案

#1


不好意思,上面加上也个头文件 #include<iostream>

#2


难道是用来保存虚类对象的映射指针???
关注学习中

#3


1  A 是要填充一个字节,所以大小是 1

#4


去看<深度探索C++对象模型>

#5


没有数据成员的空类会自动加入一字节,以保证类的每个对象拥有唯一的内存地址。
虚拟继承的得到的类会含有一个指向虚拟基类对象的指针。对于D,含有一个指向B类子对象的指针,
一个指向C类子对象的指针,B和C本来都分别含一个指向A类子对象的指针,这时可以合并为一个。
三个指针占12字节。

这些实现都与编译器有关,深究无益。

#6


这个问题我是看<深度探索C++对象模型>想到的,但是<深度探索C++对象模型>中只说明了class D: public B,public C这种情况,所以上面的情况D的大小是怎么一回事,我没有弄明白,请大家赐教.3KS

#7


不要用sizeof计算类对象的大小
其实计算出来也是错的

#8


// missilery(导弹专家) ( ) 信誉:100    Blog  2006-11-29 21:54:43  得分: 0  
//   不要用sizeof计算类对象的大小
//其实计算出来也是错的

兄弟,啥意思?说反了吧,不要手工算类对象的大小吧。

  
 

#1


不好意思,上面加上也个头文件 #include<iostream>

#2


难道是用来保存虚类对象的映射指针???
关注学习中

#3


1  A 是要填充一个字节,所以大小是 1

#4


去看<深度探索C++对象模型>

#5


没有数据成员的空类会自动加入一字节,以保证类的每个对象拥有唯一的内存地址。
虚拟继承的得到的类会含有一个指向虚拟基类对象的指针。对于D,含有一个指向B类子对象的指针,
一个指向C类子对象的指针,B和C本来都分别含一个指向A类子对象的指针,这时可以合并为一个。
三个指针占12字节。

这些实现都与编译器有关,深究无益。

#6


这个问题我是看<深度探索C++对象模型>想到的,但是<深度探索C++对象模型>中只说明了class D: public B,public C这种情况,所以上面的情况D的大小是怎么一回事,我没有弄明白,请大家赐教.3KS

#7


不要用sizeof计算类对象的大小
其实计算出来也是错的

#8


// missilery(导弹专家) ( ) 信誉:100    Blog  2006-11-29 21:54:43  得分: 0  
//   不要用sizeof计算类对象的大小
//其实计算出来也是错的

兄弟,啥意思?说反了吧,不要手工算类对象的大小吧。