类的大小

来源:互联网 发布:c语言中case的用法 编辑:程序博客网 时间:2024/05/18 09:03
  1. 非空类的大小:主要是类的数据成员大小的累加,不算静态数据成员。
  2. 空类的大小:

    1、为何空类的大小不是0呢?

    为了确保两个不同对象的地址不同,必须如此。

    类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二的二地址。同样,空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就有独一无二的地址了。所以,空类的sizeof为1,而不是0.

    2、请看下面的类:

    class A{ virtual void f(){} };

    class B:public A{}

    此时,类A和类B都不是空类,其sizeof都是4,因为它们都具有虚函数表的地址。

    3、请看:

    class A{};

    class B:public virtual A{};

    此时,A是空类,其大小为1;B不是空类,其大小为4.因为含有指向虚基类的指针

    4、多重继承的空类的大小也是1.

    class Father1{}; class Father2{};

    class Child:Father1, Father2{};

    它们的sizeof都是1.

  3. 对于一个空类而言,编译器会默认产生四个成员函数:默认构造函数,西沟函数,拷贝构造函数赋值函数


0 0
原创粉丝点击