继承空类时大小(为什么多继承不优化了呢)?

haomingzidoumeilea 2013-07-16 09:04:52
今儿effective C++看到一点:
空白基类最优化:但一般只在单继承中才可运行。为什么呢?

class A
{
};
class B
{
};
class D
{
};
class E
{
};
class F
{
};

//class C:public A,public B,public D,public E,public F
//{
// //大小为4
//};

class C:public A,public B
{
//大小1
};

int main()
{
cout<<sizeof(C)<<endl;
return 0;
}

实现了下,但有疑问。内存到底是怎么分配这些空类的??(书上说:通常C++默默安插一个char到空对象内)?
那么,既然当成char对待,为什么第一个可以忽略,后面的确不能忽略呢?
...全文
124 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
haomingzidoumeilea 2013-07-16
  • 打赏
  • 举报
回复
哦,这样啊 谢谢
飞天御剑流 2013-07-16
  • 打赏
  • 举报
回复
多继承的情况下,为了区分各个不同的基类子对象,这些基类子对象必须具有不同的地址,所以这时候不能使用空基类优化,但单继承就可以,因为对于单继承,基类子对象与最终派生类对象地址相同的情形是允许的。 同时要注意,空基类优化只能存在于基类子对象,当空类对象作为完整对象时,是不能优化的,因为C++规定,每个完整对象都必须具有唯一的地址。空类完整对象的大小并不是只能为1,而是至少为1,有些编译器会加入内存对齐的因素,所以有些编译器的空类完整对象的大小会是4或者8等等。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧