C++中类的内存分配简单总结

类的内存分配简单总结

代码片段如下:

class ClassA

{

private:

int A;

int B;

void prin1()

{

}

void prin2()

{

}

virtual void prin3()

{

}

};

class ClassB:public ClassA

{

public:

int C;

int D;

void prin4()

{

}

void prin5()

{

}

virtual void prin6()

{

}

};

int _tmain(int argc, _TCHAR* argv[])

{

cout<<sizeof(ClassA)<<endl;

cout<<sizeof(ClassB)<<endl;

return 0;

}

结果是12

20


结果为什么是这样?

32位系统int4个字节,而一个类中所有的虚函数通过一个虚函数指针管理,类对象的大小只包含这个vptr指针,其他虚函数是放在别的内存空间中管理,vptr指针也是4个字节大小。注意到普通成员函数并不占类对象的大小空间,因为普通成员函数通过this指针管理,一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。这个this指针会因编译器不同而有不同的放置位置可能是栈,也可能是寄存器,甚至全局变量。子类其实不管如何继承,用sizeof()算该类的大小都会把父类中的私有成员变量所占的空间算进去,也就是说,私有变量也在子类中分配了类存,但你却不可以直接访问,这起到一个保护作用,我感觉这如同一个珠宝,共有继承就是开放性的展览,而私有继承是把珠宝锁起来,你却不能动,要动珠宝如果有管家(基类的public中定义了一些对其私有变量操作的成员函数,)只能让管家帮你代劳。所以基类就得出了12子类就得出了20

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值