免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2883 | 回复: 3
打印 上一主题 下一主题

[C++] c++ 虚继承时内部实现机制问题(拜托大牛了),并希望详细介绍虚继承内存方面的知识 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-23 20:01 |只看该作者 |倒序浏览
// world.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

class X{
  int y;
};

class A{
public:
virtual void go(){};
int x;
};

class B :virtual public A{
int x;
};

class C : public virtual A{
    int x;
};

class D :virtual  public B,virtual public C{
    int x;
};

class E: virtual public D,virtual public X{
  int x;
};


int main(){
cout < < sizeof(A) < < endl;
  cout < < sizeof(B) < < endl;
    cout < < sizeof(C) < < endl;
cout < < sizeof(D) < < endl;
cout < < sizeof(E) < < endl;
};

int为4字节情况
为什么D是32,而不是36呢?
我认为D虚继承B,C就应该为此再分配8字节空间。而实际(我个人认为才分配4字节)

论坛徽章:
0
2 [报告]
发表于 2009-04-24 11:44 |只看该作者

回复 #1 daydayhappyacm 的帖子

由于 B,C 都虚继承于A,这样在D中只会保留一个A。所以是D是32.

论坛徽章:
0
3 [报告]
发表于 2009-04-24 20:00 |只看该作者

备注

我认为D继承B,C,有B,C中的x,这儿是8个字节,
B,C中的虚继承的A的指针也被D继承,这儿又是8个字节,
D继承B,C中的虚函数指针,这儿是4字节
D继承自A中的x是4个字节
D中的x是4个字节
D虚继承B,C后隐含生成两个指针,8字节

所以我觉的是36个字节,那问题出在哪里?

论坛徽章:
0
4 [报告]
发表于 2009-04-24 20:54 |只看该作者
《深入理解C++对象模型》,内存布局讲得很清楚。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP