C++对象模型

在c++中,有两种class data members:static 和 nonstatic ,以及三种三种class member function:static ,nonstatic,和 virtual

c++对象模型
Nonstatic data members被配置于每一个class object之内,static data members则被存放在个别的class object之外,Static 和nonstatic functon members也被放在个别的class object之外,Virtual function是则以两个步骤支持之:
1..每一个class产生出一堆指向virtal functions的指针,放在表格之中。这个表格被称为virtual table(tbl).
2.每一个class object被安插一个指针,指向相关的virtual table。通常这个指针被称为vptr.vptr的设定和重置都由每一个class的constructor,destructor,copy assignment运算符自动完成。每一个class所关联的的type_info object(用以支持RTTI)也经由virtual table被指出来,通常放在表格的第一个slot.

甚至,继承关系也可以指定为虚拟(virtual ,也就是共享的意思)
需要多少内存才能够表现一个class object?一般而言要有:
1..其nonstatic data members的总和大小。
2.加上任何由于alignment的需求而填补上去的空间,(可能存在于members之间,也可能存在于集合体边界)
译注:alignment就是将数值调整到某数的倍数。在32位计算机上,通常alignment为4 bytes,以使bus得“运输量”达到最高效率
3..加上为了支持virtual而由内部产生的任何额外负担
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值