首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问下这个函数的大小如何算,主要是virtual函数

2012-03-30 
问下这个函数的大小怎么算,主要是virtual函数class sample1{sample1(){}~sample1(){}char adouble bvirt

问下这个函数的大小怎么算,主要是virtual函数
class sample1
{
sample1(){}
~sample1(){}
char a;
double b;
virtual void GetApple(){cout << "apple"<<endl;int d = 5;cout <<d;}
};
我算出的结果是8+ 8 +8 = 24;
char 随double,问题是virtual 如何看
另外
#pragma pack()函数有什么用,是不是真正改变了类的大小,倘使这样能改变的话不是很容易出错吗?

[解决办法]
对于虚函数表指针(vfptr)和虚基类表指针(vbptr)的处理,不同的编译器有不同的处理方式。

微软的编译器,把虚函数表指针、虚基类表指针和其它成员是分开处理的,因此得到的结果是24。sample1用微软编译器得到的内存结构为:
+------------
8 | {vfptr}
| <padding 4bytes>
+------------
8 | a
| <padding 7bytes>
+------------
8 | b
+------------

如果有另外一个类虚继承了sample1,代码如下:

C/C++ code
class sample2 : public virtual sample1{}; 

热点排行