虚继承和非虚继承后的内存大小

虚继承

eg:

#include<iostream>
#include<memory.h>
#include<assert.h>
using namespace std;

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

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

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

int main()
{
cout << "sizeof(A): " << sizeof(A) << endl;
cout << "sizeof(B): " << sizeof(B) << endl;
cout << "sizeof(C): " << sizeof(C) << endl;
return 0;
}

在vs2013下输出结果为:

sizeof(A): 8

sizeof(B): 20

sizeof(C): 24

分析如下:

在vs中,当为虚继承时,虚表指针不共享,当为非虚继承时,虚表指针共享。

由于数据对齐的原因,sizeof(A)=8;

B为虚继承,sizeof(B)=sizeof(A)+自己的虚表指针+指向虚基类的虚表指针+数据对齐(4BYTE)=20;

C为非虚继承,sizeof(C)=sizeof(B)+数据对齐(4BYTE)=24;

你可能感兴趣的:(虚继承和非虚继承后的内存大小)