使用sizeof计算虚拟继承的类对象的空间大小

#include <iostream>

using namespace std;

class A
{

};

class B
{

};

class C : public A, public B
{

};

class D : virtual public A
{

};

class E : virtual public A, virtual public B
{

};

class F
{
public:
    int a;
    static int b;
};

int F::b = 10;

int main() {

    cout << "sizeof(A) = " << sizeof(A) << endl;
    cout << "sizeof(B) = " << sizeof(B) << endl;
    cout << "sizeof(C) = " << sizeof(C) << endl;
    cout << "sizeof(D) = " << sizeof(D) << endl;
    cout << "sizeof(E) = " << sizeof(E) << endl;
    cout << "sizeof(F) = " << sizeof(F) << endl;

    return 0;
}
  1. 由于A是空类,编译器会安插一个char给空类,用来标记它的每一个对象。因此其大小为1个字节。
  2. 类B大小和A相同,都是一个字节。
  3. 类C是多重继承自A和B,其大小仍然为1个字节。
  4. 类D是虚继承自A,编译器为该类安插一个指向父类的指针,指针大小为4。由于此类有了指针,编译器不会安插一个char了。因此其大小为4个字节。
  5. 类E虚继承自A并且也虚继承自B,因此它有指向父类A的指针与父类B的指针,加起来大小为8个字节。
  6. 类F含有一个静态成员变量,这个静态成员的空间不在类的实例中,而是像全局变量一样在静态存储区中,被每一个类的实例共享,因此其大小是4个字节。
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灬烟花易冷灬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值