C++ class size
首先来看这个:
1 |
|
类的大小有几点规则:
为类的成员变量大小之和,同时需要满足一些对齐要求(例如上面的例子中对齐为1个字节)
编译器额外加入的大小,例如虚函数的指针,虚继承,多重继承
与类的构造析构和成员函数无关
继承计算大小时会把私有变量计算在内
注意
空类的大小为1:To ensure that the addresses of two different objects will be different.
虚函数:由于类中有一个virtual table,所以需要一个指针指向该表,在上例中指针是8个字节。另外,还可能遇到向上对齐的情况,例如:
1 | class AbstractClass { |
- 虚继承:虚继承除了加上父类的大小之外,还需要一个指针指向虚基类,同时考虑对齐,例如:
1 | class intClass { |