派生类的大小

时间:2013-02-21 05:58:47

标签: c++ virtual-inheritance

我是C ++编程的新手,在下面的代码中,我使用的是虚拟继承,因此派生类的大小显示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;
}

1 个答案:

答案 0 :(得分:2)

我猜你是在编译为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 ++编译器将指向虚函数表的指针静默地添加到您的类中,作为包含任何虚函数的类继承层次结构的任何类。