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字节。
这些实现都与编译器有关,深究无益。
虚拟继承的得到的类会含有一个指向虚拟基类对象的指针。对于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计算类对象的大小
//其实计算出来也是错的
兄弟,啥意思?说反了吧,不要手工算类对象的大小吧。
// 不要用sizeof计算类对象的大小
//其实计算出来也是错的
兄弟,啥意思?说反了吧,不要手工算类对象的大小吧。
#1
不好意思,上面加上也个头文件 #include<iostream>
#2
难道是用来保存虚类对象的映射指针???
关注学习中
关注学习中
#3
1 A 是要填充一个字节,所以大小是 1
#4
去看<深度探索C++对象模型>
#5
没有数据成员的空类会自动加入一字节,以保证类的每个对象拥有唯一的内存地址。
虚拟继承的得到的类会含有一个指向虚拟基类对象的指针。对于D,含有一个指向B类子对象的指针,
一个指向C类子对象的指针,B和C本来都分别含一个指向A类子对象的指针,这时可以合并为一个。
三个指针占12字节。
这些实现都与编译器有关,深究无益。
虚拟继承的得到的类会含有一个指向虚拟基类对象的指针。对于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计算类对象的大小
//其实计算出来也是错的
兄弟,啥意思?说反了吧,不要手工算类对象的大小吧。
// 不要用sizeof计算类对象的大小
//其实计算出来也是错的
兄弟,啥意思?说反了吧,不要手工算类对象的大小吧。