类对象的大小

class C1

{

};

C1 的大小为1 。当类中无任何成员变量时,编译器会给他分配1 字节空间。

 

class C2

{

private :

     int x;

};

C1 的大小为4

 

class C3

{

private :

     void f(){};

};

C3 的大小为1 。普通成员函数不占用对象的空间

 

class C4

{

public :

     virtual void f(){};

};

C4 的大小为4 。当虚函数存在,会分配一个指针指向虚函数表

 

class C5

{

public :

     virtual void f1(){};

     virtual void f2(){};

     virtual void f3(){};

};

C5 的大小为4 。分配一个指针指向虚函数表,虚函数表中会有指针分别指向C5::f1(), C5::f2(), C5::f3() 的地址

 

class C6

{

private :

     string str1;

};

C6 的大小为0x1ChString 的大小就是0x1Ch

 

class C7 : public C4

{

};

C7 的大小为4 。虚函数表中指针指向C4::f()

 

class C8 : public C4

{

public :

     virtual void f(){};

};

C8 的大小为4 。虚函数表中指针指向C8::f()

 

class C9 : public C4, public C5

{

public :

     virtual void f(){};

};

C9 的大小为8 。他有两个指针分别指向来自C4C5 的虚函数表

 

class C10 : public C4

{

public :

     virtual void f1(){};

};

C10 的大小为4 。在虚函数表后会附加上C10 自身的虚函数C10::f1()

 

class C11

{

private :

     char c1;

     char c2;

     int i;

     char c3;

};

C10 的大小为0x0Ch 。由于需要内存对齐,c1,c2 占用4 字节,i 占用4 字节,c3 占用4 字节

 

class C12

{

private :

     char c1;

     static int x;

};

C12 的大小为1Static 成员变量不占用对象的空间

 

class C13

{

private :

     char c1;

     const int x;

};

C13 的大小为8const 成员变量占用对象的空间,其中const 变量在类初始化时在初始化表中初始化,不同对象的const 成员变量的值完全可能不一样

 

class C14

{

private :

     char c1;

     static const int x;

};

C14 的大小为1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值