[COM技术内幕](四)引用计数

AddRef ; Release 简单规则:

  1、在返回之前调用 AddRef。对于那些返回接口指针的函数(QueryInterface();CreateIntance()),返回之前应该使用相应的指针调用AddRef。这样函数得到接口后将无需调用 AddRef。

  2、使用完接口后调用Release。在使用完某个接口之后应该调用此接口的 Release()。

  3、在赋值之后调用 AddRef。在将一个接口指针赋给另一个接口指针时,应该调用AddRef。

引用计数规则:

  1、输出参数规则:输出参数指的是给函数的调用者返回一个值的函数参数。在函数体中将设置此输出参数的值而不会使用调用者传进来的值。任何输出参数中或作为返回值返回一个新的接口的函数必须对此接口指针调用AddRef.

  2、输入参数规则:输入参数指的是给函数传递某个值的参数。在函数体中将会使用这个值但不会修改它或将其返回给调用者。对传入函数的接口指针,无需调用AddRef和Release,因为函数的生命周期嵌套在调用者的生命周期内。

  3、输入-输出参数规则:具有同时输入参数及输出参数的功能的参数。在函数体中可以使用输入-输出参数的值,然后可以对这些值进行修改将其返回给调用者。对用输入-输出参数传递进来的接口指针,必须在给它赋值给另一个接口指针之前调用其 Release,在函数返回之前,还必须对输出参数中所保存的接口指针调用 AddRef。

  4、局部变量规则:对于局部复制的接口指针,由于它们只是在函数的生命期内才存在。因此无需调用 AddRef 和 Release。

  5、全局变量规则:在将其传递给另一个函数之前,必须调用其AddRef。全局变量在任何地方都可以调用其Release。

  6、不能确定时的规则:对于不能确定的情形,都应该调用 AddRef和Release。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值