码迷,mamicode.com
首页 > 其他好文 > 详细

空类,含有虚函数的类的大小

时间:2019-10-15 20:44:19      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:单元   eof   虚函数表   定义   虚函数   第一个   函数   virtual   public   

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

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

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

2、继承关系中的类大小:

case 1:

父类有虚函数,子类继承。

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

class B:public A{}

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

case 2:

父类是空类,子类以虚基类方式继承。

class A{};

class B:public virtual A{};

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

case 3: 多重空类继承

class Father1{}; class Father2{};

class Child:Father1, Father2{};

它们的sizeof都是1.

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

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

空类,含有虚函数的类的大小

标签:单元   eof   虚函数表   定义   虚函数   第一个   函数   virtual   public   

原文地址:https://www.cnblogs.com/fancy-li/p/11680185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!