- 空类占用一个空间。如果有任何成员需要占用空间,空类占用的一个空间不再有效。这一个空间相当于占位符,C++不允许不占用空间的类型。如果空类作为一个成员,则占用一个空间,相当于一个变量类型。如果继承空类,并且本身类有占用空间的成员,则空类的一个空间不再有效。
- static的变量不占用空间,因为存储在静态区域共享
- 函数不占用空间
- 虚函数占用空间,一个指针大小。不管是纯虚函数还是虚函数,因为需要构建虚函数表
- 继承带有虚函数的基类,子类与基类公用一个虚函数指针。如果继承多个虚函数基类,那么就是每个虚函数基类都要额外增加一个虚函数指针大小
class CTest1
{
};
class CTest2
{
void f() { cout << "a" << endl; }
};
class CTest3
{
virtual void f() { int i = 0; }
};
class CTest4
{
int a;
};
class CTest5
{
int a;
static int b;
};
class CTest6
{
virtual void f() = 0;
};
class CTest7
{
virtual void f() = 0;
virtual void f1() {};
};
enum MyEnum
{
A,
B,
C
};
class CTest8
{
MyEnum me;
};
int main() {
cout << sizeof(CTest1) << endl;//1
cout << sizeof(CTest2) << endl;//1
cout << sizeof(CTest3) << endl;//4
cout << sizeof(CTest4) << endl;//4
cout << sizeof(CTest5) << endl;//4
cout << sizeof(CTest6) << endl;//4
cout << sizeof(CTest7) << endl;//4
cout << sizeof(CTest8) << endl;//4
return 1;
};