标签:
用sizeof求类的大小,http://blog.csdn.net/szchtx/article/details/1025400,这篇博文给出了非常详尽的举例介绍。
但是细心的我还是发现了一个小瑕疵,那就是对如下例子求sizeof(B),在VS下是16不是12!
class A { public: int a; private: char b; }; class B : public A { public: int d; char c; };
以下是我根据上机实验结果,总结的精华要点,希望从此以后不再为sizeof求类大小而烦忧:
1. sizeof(空类)=1,但当空类作为继承树非叶子类求大小的情况下,在计算的时候=0
2. 继承树中,不管是虚继承还是普通继承,同一层级中,不管虚多少次,只能算一次+4,不算的等同于注掉
3. 继承树中,不管是虚继承还是普通继承,跨层级凡是发现虚函数同名的,只能算一次,不算的等同于注掉
4. 虚继承,在继承树中每虚继承一次+4
5. 虚继承,跨层级只要虚函数不同名,就各自分别算一次+4
6. 普通继承,跨层级不管有多少虚函数,只能算一次+4,不算的等同于注掉
7. 静态变量不在类大小计算范围之内
8. 注意偏移对齐的问题,结果为4的整数倍
标签:
原文地址:http://www.cnblogs.com/researcher/p/4548089.html