說明
- 編譯器為不含任何成員的空類分配大小為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