首页 > 其他 > 详细

Empty virtual base class的内存分配

时间:2014-10-11 18:38:47      阅读:246      评论:0      收藏:0      [点我收藏+]
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的内存分配

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!