1

以下のコードでは仮想継承を使用しているため、派生クラスのサイズは24バイトを示していますが、それがどのようになっているのかわかりません。正確に教えてください。

#include "stdafx.h"
#include <iostream>
using namespace std;

class BaseClass
{
      private : int a, b;
      public :
  BaseClass()
  {
    a = 10;
    b = 20;
  }
  virtual int area()
  {
    return 0;
  }
};

class DerivedClass1 : virtual public BaseClass
{
  int x;
      public:
  virtual void simple()
  {
    cout << "inside simple" << endl;
  }
};

int main()
{
   DerivedClass1 Obj;
   cout << sizeof(Obj) << endl;
   return 0;
}
4

1 に答える 1

4

64ビットとしてコンパイルしていると思いますか?その場合、DerivedClass1 はおそらく次のバイト配列でメモリに配置されます。

offset     size    type
0          8       pointer to virtual function table
8          4       int BaseClass::a
12         4       int BaseClass::b
16         4       int DerivedClass1::x
20         4       filler, so that the total size of this class is an even number of 64-bit (8-byte) words

仮想関数テーブルへのポインターは、仮想関数を含むクラス継承階層の一部であるすべてのクラスについて、C++ コンパイラによってクラスにサイレントに追加されます。

于 2013-02-21T06:12:31.167 に答える