COM笔记(生存周期控制)

IUnknown接口实现生存周期控制的方法。每一个对象都记录了一个成为“引用计数”的数值,该数值的含义为

有多少个有效指针的引用该COM对象。当客户得到了一个指向该对象的接口指针时,引用计数增加1;当客户用完接口指针时

,引用计数减一。当引用计数为0的时候COM对象就应该把自己从内存中清除掉,也就是调用清除函数;

引用计数的实现有三个层次。按照COM的规范一个COM组件可以实现多COM对象。并且每个对象又可以支持对歌COM接口

,可以选择在COM组件一级实现计数引用,也可以在COM对象实现引用计数,甚至可以为对象的每个接口设置一个引用计数。

 

组件一级引用计数,只需要实现组件时,用一个全局帧数变量记录引用计数值,当组件被初始化装入内存时

该计数值为0,当有组件被创建是增加,在整个组件被使用过程中计数值一直保持大于0,当组件中的所有对象都被用完之后,计数值应该减回到0,于是组件就可以从内存中取出。

 

对象一级和接口一级的引用计数实现和组件一级引用计数的实现方法类似,不同指出在于,这里分别为对象和接口设置引用计数变量,在组件的一级实现引用计数

引用计数变量自然可以选择全局变量;在对象一级实现引用计数,可以使用c++类的成员变量,在接口一级实现引用计数,可以为实现的每一个接口设置一个类成员变量最为引用计数变量。

 

这三种引用计数的实现层次各有优缺点,组件的一级引用计数实现简单,但它仅能控制模块的生存期,无法判断组件中的某个对象是否已经被使用完,

只有等组件的所有对象都被是使用完后,所有的的对象才能被一起释放。这样做自然降低了系统资源的利用率。接口一级实现引用计数可以控制每个接口的生存期,

只要某一接口不再被使用就可以被释放,这种类型的资源利用率最高,但实现最为复杂。而对象的一级引用计数具有折中效果所以比较合理的方案是采用对象一级的引用计数

以便控制对象和组件的生存周期。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值