使用sizeof获取类的大小

一,一个空类的大小为1

class D{
public:
    void display(){}
};

int main(){
    cout<<sizeof(D)<<endl;
    return 0;
}

那是被编译器插进去的一个char,使得这个class的不同对象在内存中配置独一无二的地址,即这个char用来标识不同的类对象。


二,一个类的大小只与非静态数据成员和虚函数有关,与其他的成员没有关系

class D{
private:
    static int a;
    double d;
public:
    virtual void display(){}
};
此时sizeof(D)为16,double占用8个字节,指向虚函数表的指针占用4个字节,再加上补全的4个字节,一共是占用16个字节。


三,在多重继承中,如果有n个基类都有虚函数,那么在派生类的对象中就有n个指向虚函数表的指针

class A{
public:
    virtual void func(){
    }
};

class B{
public:
    virtual void func();
};

class C : public A, public B{
};
此时sizeof(C)为8,说明在C对象中有2个指向虚函数表的指针。一个对象所拥有的指向虚函数表的指针的个数与对象所属的类所拥有的虚函数表的数目是相同的,也就是说一个类有n个虚函数表,那么这个类的对象就有n个指向虚函数表的指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值