1

我是 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;
}
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 回答