类的大小统计规则

  1. 空类占用一个空间。如果有任何成员需要占用空间,空类占用的一个空间不再有效。这一个空间相当于占位符,C++不允许不占用空间的类型。如果空类作为一个成员,则占用一个空间,相当于一个变量类型。如果继承空类,并且本身类有占用空间的成员,则空类的一个空间不再有效。
  2. static的变量不占用空间,因为存储在静态区域共享
  3. 函数不占用空间
  4. 虚函数占用空间,一个指针大小。不管是纯虚函数还是虚函数,因为需要构建虚函数表
  5. 继承带有虚函数的基类,子类与基类公用一个虚函数指针。如果继承多个虚函数基类,那么就是每个虚函数基类都要额外增加一个虚函数指针大小
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;
};

posted @ 2021-03-19 13:41  秋来叶黄  阅读(78)  评论(0编辑  收藏  举报