C语言中AddRef和Release的使用技巧
引导语:你知道在C语言中AddRef和Release是一个怎样的存在吗,以下是本站小编分享给大家的C语言中AddRef和Release的使用技巧,欢迎阅读!
AddRef和Release实现的是一种名为引用计数的内存管理技术,这种技术是使组件能够自己将自己删除的最简单同时也是效率最高的方法。 COM组件将维护一个称作是引用计数的数值。当客户虫组件取得一个接口时,此数值增1,当客户使用完某个接口后,此数值将减1。当此数值为0时,组件即可将自己从内存中删除。
为正确的使用引用计数,需要了解一下三条规则:
(1)在返回之前调用AddRef。对于哪些返回接口指针的函数,包括QueryInterface和CreateInstance,在返回之前用相应的指针调用AddRef。
(2)使用完接口之后调用此接口的`Release函数。
(3)在赋值之后调用AddRef。如在将一个接口赋给另外一个接口指针时调用AddRef。
生命期嵌套在引用同一接口的指针的生命期内的指针可以不进行引用计数。在函数中,无需对存在于局部变量的接口指针进行引用计数。因为局部变量的生命期同函数的生命期是一样的,因此也将包含在调用者的生命期内。但当从某个全局变量或向某个全局变量复制一个指针时,则需要对此指针进行引用计数,因为全局变量可以从任意函数中的任意地方被释放。
一般而言,客户必须为每一个接口维护一个单独的引用计数值。
总结引用计数的几条具体规则如下:
(1)输出参数规则。任何在输出参数中(如QueryInterface的void** ppv)或作为返回值返回一个新的接口指针的函数必须对此接口指针调用AddRef。即在返回之前调用AddRef。
(2)输出参数规则。在输入参数(C++的按值传递的参数或常量)传入函数的接口指针,无需调用AddRef和Release。因为函数的生命期嵌套在调用者的生命期内。
(3)输入-输出参数规则,即在函数体中可以使用输入-输出参数的值,然后可以对这些制进行修改并将其返回给调用者,对于具有这种功能的参数传进来的接口指针,必须在给它赋另外一个接口指针值之前调用其Release,并在函数返回之前,对输入参数中所保存的接口指针调用AddRef。
(4)局部变量规则。对于局部复制的接口指针,由于它们只在函数的生命期内才存在,无需调用AddRef和Release。
(5)全局变量规则。对于保存在全局变量中的接口指针,在将其传递给另外一个函数之前,必须调用其AddRef。对于保存在成员变量中的接口指针,也应按此中方式进行处理。因为类中的任何成员函数都可以改变此中接口指针的状态。
(6)不能确定时的规则。对于任何不能确定的情形,都应调用AddRef和Release。
在决定要对引用计数进行优化时,应给哪些没有进行引用计数的指针加上相应的注释,否则,其他程序员在修改代码时,将可能会增大接口指针的生命期,从而使引用计数的优化遭到破坏。
-
2017年计算机二级C语言考前训练题及答案
计算机二级对于很多考生来说还是比较有难度的,那么怎样顺利通过二级考试呢?这就需要大家平时多练习和找方法了。以下是本站小编整理的2017年计算机二级C语言考前训练题及答案,希望对大家有帮助!考前训练题一1:第1题m个人的成绩存放在score数组中,请编写函数fun,它...
-
2017年计算机二级考试C语言备考题及答案
计算机二级对于很多考生来说还是比较有难度的,那么怎样顺利通过二级考试呢?这就需要大家平时多练习和找方法了。以下是本站小编整理的2017年计算机二级考试C语言备考题及答案,希望对大家有帮助!1.(A)是构成C语言程序的基本单位。A、函数B、过程C、子程序D、子例...
-
2017计算机二级C语言上机考试技巧
引导语:在计算机二级C语言考题中要求考生把一道C语言程序考题,通过考生自己编写的函数补充完整,共同完成考题的一项或多项任务。以下是本站小编分享给大家的2017计算机二级C语言上机考试技巧,欢迎阅读!第一部:备考篇名将不打无准备之仗,复习备考的好坏,是能否顺利通过...
-
C语言的指针类型讲解
C语言的指针类型包括两方面的信息:一是地址,存放在指针变量中;二是类型信息,下面是小编为大家整理的C语言的指针类型讲解,欢迎参考~指针存储了内存的地址,同时指针是有类型的,如int*,float*,那么,一个自然的猜想就是指针变量应该存储这两方面的信息:地址和指针类型,比如,就...
相关文章
- Dreamweaver中应用CSS的技巧
- Dreamweaver中JavaScript行为操作使用方法
- Dreamweaver中JavaScript行为操作使用的总结
- A Lifeguard at Johns Beach Saved a Drowning Child,A Lifeguar英语作文
- Careless and Carefu英语四级作文
- DreamWeaver中CSS样式表应用技巧
- Dreamweaver中应用CSS的技巧介绍
- 关于javascript中encodeURI和decodeURI的使用方法
- The Advice From Hollywood Female Stars高中英语作文
- Dreamweaver和excel的一些使用技巧