inside C++笔记之C++对象模型

首先看下Point

i.简单对象模型,
在这个模型中,一个object是一系列的slots,每一个slot指向一个member.Members按其声明次序,各被指定一个slot,每一个data member 或 function member 都有自己的一个slot.

如果所示:

 

在简单模型中,Member本身并不放在object之中,只有“指向member的指针”才放在object内,这么做可以避免“members有不同的类型,因而需要不同的存储空间”所招致的问题Object中的member是根据索引来寻址,object的大小是member数乘以指针大小。这个模型的关于索引或slot数目的观念被应用到C++的“指向成员的指针”观念之中。

 

ii. 表格驱动对象模型

这个模型中把所有membert相关的信息全部抽取出来,放在两个table中:data member tablefunction member table.function member talbe是一系列的slots,每个slot指向一个member functionData member table 包含data的本身。Object包含指向这两个talbe的指针。

如图所示:

这个模型的member function table这个观念应用到C++模型中的vitrual functions中。

 

 iii.C++对象模型
这个模型中,nonstatic data member被配置在每一个object内,static data member被放置在object之外。无论是nonstatic function member或是static function member都放置在object之外。对virtual function有两个步骤:
1. 每一个object产生一堆指向virtual function的指针,把这些指针放在一个table中,称之为virtrual talbe(vtbl)
2. 每一个object添加一个指向这个vtbl的指针,称之为vptr。Vptr的设定和重置都是由每一个class的constructor,destructor和copy assignment运算符自动完成。每一个class所关联的type_info object也经由virtual table被指出来,通常放在表格的第一个slot处。

如图所示:

这个模型的主要优点是空间和存取时间的效率,主要缺点则是,如果应用程序的代码本身未曾改变,但所用到的class objects的nonstatic data members有所修改(增加,删除或更改),那么那些应用程序用样重新编译。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值