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