COM笔记(生存周期控制)
2012-10-19 15:19
190 查看
IUnknown接口实现生存周期控制的方法。每一个对象都记录了一个成为“引用计数”的数值,该数值的含义为
有多少个有效指针的引用该COM对象。当客户得到了一个指向该对象的接口指针时,引用计数增加1;当客户用完接口指针时
,引用计数减一。当引用计数为0的时候COM对象就应该把自己从内存中清除掉,也就是调用清除函数;
引用计数的实现有三个层次。按照COM的规范一个COM组件可以实现多COM对象。并且每个对象又可以支持对歌COM接口
,可以选择在COM组件一级实现计数引用,也可以在COM对象实现引用计数,甚至可以为对象的每个接口设置一个引用计数。
组件一级引用计数,只需要实现组件时,用一个全局帧数变量记录引用计数值,当组件被初始化装入内存时
该计数值为0,当有组件被创建是增加,在整个组件被使用过程中计数值一直保持大于0,当组件中的所有对象都被用完之后,计数值应该减回到0,于是组件就可以从内存中取出。
对象一级和接口一级的引用计数实现和组件一级引用计数的实现方法类似,不同指出在于,这里分别为对象和接口设置引用计数变量,在组件的一级实现引用计数
引用计数变量自然可以选择全局变量;在对象一级实现引用计数,可以使用c++类的成员变量,在接口一级实现引用计数,可以为实现的每一个接口设置一个类成员变量最为引用计数变量。
这三种引用计数的实现层次各有优缺点,组件的一级引用计数实现简单,但它仅能控制模块的生存期,无法判断组件中的某个对象是否已经被使用完,
只有等组件的所有对象都被是使用完后,所有的的对象才能被一起释放。这样做自然降低了系统资源的利用率。接口一级实现引用计数可以控制每个接口的生存期,
只要某一接口不再被使用就可以被释放,这种类型的资源利用率最高,但实现最为复杂。而对象的一级引用计数具有折中效果所以比较合理的方案是采用对象一级的引用计数
以便控制对象和组件的生存周期。
有多少个有效指针的引用该COM对象。当客户得到了一个指向该对象的接口指针时,引用计数增加1;当客户用完接口指针时
,引用计数减一。当引用计数为0的时候COM对象就应该把自己从内存中清除掉,也就是调用清除函数;
引用计数的实现有三个层次。按照COM的规范一个COM组件可以实现多COM对象。并且每个对象又可以支持对歌COM接口
,可以选择在COM组件一级实现计数引用,也可以在COM对象实现引用计数,甚至可以为对象的每个接口设置一个引用计数。
组件一级引用计数,只需要实现组件时,用一个全局帧数变量记录引用计数值,当组件被初始化装入内存时
该计数值为0,当有组件被创建是增加,在整个组件被使用过程中计数值一直保持大于0,当组件中的所有对象都被用完之后,计数值应该减回到0,于是组件就可以从内存中取出。
对象一级和接口一级的引用计数实现和组件一级引用计数的实现方法类似,不同指出在于,这里分别为对象和接口设置引用计数变量,在组件的一级实现引用计数
引用计数变量自然可以选择全局变量;在对象一级实现引用计数,可以使用c++类的成员变量,在接口一级实现引用计数,可以为实现的每一个接口设置一个类成员变量最为引用计数变量。
这三种引用计数的实现层次各有优缺点,组件的一级引用计数实现简单,但它仅能控制模块的生存期,无法判断组件中的某个对象是否已经被使用完,
只有等组件的所有对象都被是使用完后,所有的的对象才能被一起释放。这样做自然降低了系统资源的利用率。接口一级实现引用计数可以控制每个接口的生存期,
只要某一接口不再被使用就可以被释放,这种类型的资源利用率最高,但实现最为复杂。而对象的一级引用计数具有折中效果所以比较合理的方案是采用对象一级的引用计数
以便控制对象和组件的生存周期。
相关文章推荐
- Linux新手生存笔记[9]——shell脚本基础2-条件测试及控制流
- 作用域生存周期理解笔记
- 【web开发学习笔记】Servlet生存周期
- [Android新手学习笔记27]-Fragment碎片生存周期
- JAVA自学笔记(二):类生存周期及访问权限
- win 8 学习笔记一:生存周期
- 「Redis学习笔记」生存周期
- 09暑假笔记(4)-Mediawiki使用Accesscontrol实现访问控制
- 软件工程:(一)软件生存周期与开发模型
- Python开发技术详解-笔记_第03章-Python的控制语句
- 《高性能MySQL》笔记-多版本并发控制
- mysql 权限控制笔记
- SCOM Authoring Guide 阅读笔记 -- SCOM任务
- 【JS学习笔记】JS基础中:流程控制
- 【包及访问控制权限】_包的定义及导入笔记
- 【Cocos2d-x游戏引擎开发笔记(16)】动画速度的控制
- 黑马程序员——Swift学习笔记:流程控制
- 【慕课笔记】第四章 流程控制语句 第4节 JAVA条件语句之嵌套if
- WPF学习笔记 - 控制数据的呈现
- Python学习笔记(3)控制结构