There can be no Triumph without Loss,No Victory without Suffering,No Freedom without Sacrifice.
All you have to decide is what to do with the time that is given to you.
Get busy Living, or Get busy Dying?
  首页 | 留言给我 | 订阅 Rss | CLI | 黄白之恋 Posts:158   Hits: 5059778    Comments: 173    
 日历归档
<<  <  2024 - 04  >  >>
SuMoTuWeThFrSa
 123456
78910111213
14151617181920
21222324252627
282930
 About Me
 Name: ZhangSichu
 Sex: Male
 Age: 32
 Email: ZhangSichu@gmail.com
 MSN: ZhangSichu@hotmail.com
 Home: ZhangSichu.com
 WeiBo: weibo.com/zhangsichu
 个人推荐
 分类归档
  ·C++/C(5)  RSS
  ·软件工程(1)  RSS
  ·杂事/随感(26)  RSS
  ·.Net/Java(30)  RSS
  ·面向对象程序设计(5)  RSS
  ·汇编/破解(0)  RSS
  ·平面设计(3)  RSS
  ·SQL(5)  RSS
  ·COM/COM+(2)  RSS
  ·Web开发(81)  RSS
 My Friends
Back Forward Refresh Home 2024年4月19日 星期五 RSS CLI Mine Sweeper. In Javascript.

  摘自《Essential Com》
字体大小 [ ]

COM 的引用计数规则可以精简为下面三个简单的公里:
1.当一个非空的接口指针从一个内存位置被拷贝到另一个内存位置时,应该要调用AddRef,以便通知对象又有附加的引用发生了。
2.对于已经包含非空接口指针的内存位置来说,在重写该内存位置之前,必须要先调用Release,以便通知对象“这个引用已经被销毁了”。
3.如果你对两个和多个内存位置之间的关系有特殊的理解的话,那么多余的AddRef和Release调用可以被优化掉。

下面是一些比较通用的,要求调用AddRef方法的情形:
A1.当把一个非空接口指针写到局部变量中。
A2.当被调用方把一个非空接口指针写到方法或者函数的[out]或者[in,out]参数中时。
A3.当被调用方返回一个非空接口指针作为函数的实际结果时。
A4.当把一个非空接口指针写到对象的一个数据成员中时。

下面是一些比较通用的要求调用Release方法的情形:
R1.在改写一个非空局部变量或者数据成员之前。
R2.在离开非空局部变量的作用域(scope)之前。
R3.当被调用方要改写方法或者函数的[in,out]参数,并且参数的初始值为非空时。注意,[out]参数往往被假“输入时为空值”,所以被调用方永远也不必释放[out]参数。
R4.在改写一个对象的非空数据成员之前。
R5.在离开一个对象的析构函数之前,并且这时还有一个非空接口指针作为数据成员。

还有一种很常见的特殊情况是,当把接口指针作为[in]参数传给函数时,可以使用前面给出的第3条关于特殊知识的规则:
S1.调用方把一个非空接口指针通过[in]参数传递给一个函数或者方法时,既不需要调用AddRef,也不需要调用Release,因为在调用堆栈中,临时变量的生命周期只是"用于初始化形式参数"的表达式的生命周期的一个子集。
  Posted @ 1/23/2007 2:21:33 PM | Hits (57892) | Comment (0

  Post Comment
标题 *
作者 *
密码 记住我
评论 *
    


Stable in Firefox 1.5 2.0Stable in IE6 IE7Stable in MozillaStable in Netscape
ZhangSichu.com V0.1.7507
Powered By ZhangSichu
Copyright © ZhangSichu
Download ZhangSichu.com source code. Download source code