测试环境 windows xp SP3,vc60
1.空类占字节数
class Father { }; int main(){ cout<<sizeof(Father)<<endl; return 0; }
输出:1
分析:空类之所以要占一个字节,应该是为了能够定义该类的不同对象(具体如何操作现在还不太明白)。
2.有一个成员变量的类占字节数
class Father { private: int a; }; int main(){ cout<<sizeof(Father)<<endl; return 0; }
输出:4
分析: 因为在32位机器上int类型占4个字节。
3.有一个普通成员函数
class Father { public: char * TFunc(); };
char * Father::TFunc() { return "Father"; } int main(){ cout<<sizeof(Father)<<endl; return 0; }
输出:1
分析:这应该跟对类函数的存储方式有关系(待补充)。
4.有一个虚函数
class Father { public: virtual char * TFunc(); }; char * Father::TFunc() { return "Father"; } int main(){ cout<<sizeof(Father)<<endl; return 0; }
输出:4
分析:这是因为Father类建立了一个__vfptr指针,指向一个虚函数表,其第一个元素就是指向TFunc()的指针,所以所占空间大小为4.(疑问:这个时候难道就能将不同的对象区分了吗,就能不要那1个字节吗?)
如下图所示:所以在类中有两个虚函数时,sizeof(Father)的大小同样为4.那是因为根据MSDN的描述:The sizeof operator cannot return the size of dynamically allocated arrays or external arrays.所以此时用sizeof计算得到的只是头指针的大小(一个指针占4个字节)。
待续...