相关疑难解决方法(0)

虚拟继承时类的大小

有人可以解释在涉及虚函数的虚拟继承的情况下类的大小.

   class A{
          char k[ 3 ];
          public:
          virtual void a(){};
          };

   class B : public  A{
          char j[ 3 ];
          public:
          virtual  void b(){};
          };

   class C : public virtual A{
          char i[ 3 ];
          public:
          virtual void c(){};
          };

   class D : public B, public C{
          char h[ 3 ];
          public:
          virtual void d(){};
          };
Run Code Online (Sandbox Code Playgroud)

类的大小输出是:

    sizeof(A): 8
    sizeof(B): 12
    sizeof(C): 16
    sizeof(D): 32
Run Code Online (Sandbox Code Playgroud)

我正在使用的编译器是 gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)

c++ polymorphism virtual

5
推荐指数
1
解决办法
2171
查看次数

虚拟继承是否会增加派生类的大小?

可能重复:
虚拟对象大小

虚拟继承是否会更改派生类的大小?我执行了以下代码,其中有两个派生类,一个是虚拟继承的,另一个是非虚​​拟继承的:

class A {
 public:
int a;
  virtual void a1();
};


class non_vir_der: public A{
 public:
int c;
  virtual void aa();
};


class vir_der: public virtual A{
public:
int d;
virtual void bb();
};

int main()
{
cout<<sizeof(non_vir_der)<<"\n";
cout<<sizeof(vir_der)<<"\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

12(imo:4(int a)+ 4(int c)+ 4(vir ptr))

16(额外4?)

再次检查我是否错过了什么,我尝试了所需的最小代码,删除了类中的所有整数,输出为:

4

4

第二个输出表明两个派生类的大小相同.为什么第一次运行中的vir_der 16的大小,为什么不是12?

c++ size virtual-inheritance

3
推荐指数
1
解决办法
1102
查看次数

标签 统计

c++ ×2

polymorphism ×1

size ×1

virtual ×1

virtual-inheritance ×1