說(shuō)明
- 編譯器為不含任何成員的空類分配大小為1的空間,這樣空類定義的變量地址不會(huì)與其相鄰定義的變量地址相同。
- 編譯器會(huì)在空類的子類中優(yōu)化掉這多分配的空間。
- 帶虛析構(gòu)函數(shù)的空類不是嚴(yán)格意義的空類,它包含虛函數(shù)表指針,因此其大小為指針的大小。
實(shí)驗(yàn)代碼
/** * @file empty_size.cpp * @brief 測(cè)試空類的大小 * @copyright public domain */#include<iostream>class Empty { };class SubEmpty : public Empty{protected: int mInt; };class VEmpty{public: virtual ~VEmpty() = 0;};int main() { std::cout << "Empty class: " << sizeof(Empty) << std::endl; std::cout << "SubEmpty: " << sizeof(SubEmpty) << std::endl; std::cout << "VEmpty: " << sizeof(VEmpty) << std::endl; std::cout << "Void*: " << sizeof(void*) << std::endl; return 0;};
運(yùn)行及結(jié)果
> g++ empty_size.cpp
> a.exe
Empty class: 1
SubEmpty: 4
VEmpty: 8
Void*: 8