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

Empty virtual base class的内存分配

时间:2014-10-11 19:14:16      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:blog   http   使用   ar   数据   div   2014   log   amp   

class X{};
class Y:public virtual X{};
class Z:public virtual X{};
class A:public Y,public Z{};

使用sizeof在vs210上计算上面类的大小,计算结果如下

  bubuko.com,布布扣

可以看到empty virtual base class的大小并不是0,编译器会安插一个char,这样可以让两个object在内存中有独一无二的地址

X a,b;
if(&a == &b)
    cerr<<"Memery address is same!"<<endl;

class Y 和 class Z的大小是4,这是因为这两个函数虚继承了class X,virtual base class 被放在derived class object 开头的部分,又由于内存对其原则,自动补充了3bytes,所以大小是4。

Empty virtual base class 已经成为C++ OO设计的一个特有技术术语,它提供了一个virtual interface,没有定义任何数据。某些新的编译器对此提供了特殊处理,一个empty virtual base class被视为derived class object最开头的一部分。

class X,Y,Z在内存中的布局如下图所示:

bubuko.com,布布扣

Empty virtual base class的内存分配

标签:blog   http   使用   ar   数据   div   2014   log   amp   

原文地址:http://www.cnblogs.com/jianxingzhe/p/4019261.html

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