菜鸟笔记
提升您的技术认知

空类大小-ag真人游戏

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.

5、何时共享虚函数地址表:

如果派生类继承的第一个是基类,且该基类定义了虚函数地址表,则派生类就共享该表首址占用的存储单元。对于除前述情形以外的其他任何情形,派生类在处理完所有基类或虚基类后,根据派生类是否建立了虚函数地址表,确定是否为该表首址分配存储单元。

网站地图