那位能说说使用AddRef 和 Release的体会?该如何处理

那位能说说使用AddRef 和 Release的体会?
感觉写COM组件程序,最让人头疼的就是AddRef 和 Release.

那位能说说使用AddRef 和 Release的体会?

另外,如何在调试程序过程中,看到组件的引用计数?

谢谢!

------解决方案--------------------
如果你的com组件要给外部的程序使用,那么最好正确的实现AddRef,Release,这样才不至于内存泄露甚至导致程序崩溃。
如果只是自己程序用,那么你在AddRef,Release简单的return 1好了。

调试程序的时候,

如果你有一个Com类m_objCom;引用计数的成员变量m_nRefCount;
在watch中输入m_objCom.m_nRefCount来访问。

如果你是通过接口的形式来使用com类,那么你可以在自己实现的接口中添加个一个变量好了,用的时候
在watch中输入pInterface->m_nRefCountEx.
------解决方案--------------------
感觉现在写组件,AddRef 和 Release 已经 又 ATL或者MFC 替你实现了



------解决方案--------------------
COM接口就是资本家手下的民工:
AddRef是为了让民工好好地活着,Release是为了让民工老死而不是病死,QueryInterface是为了让民工干苦力
------解决方案--------------------
体会?

不要把它搞得太复杂,其实很简单的一个事情。它不就是一个内存引用计数的功能么?!为什么要这样?还不是为了避免出现内存问题:
1、还有程序在使用这块内存,你就给释放了,导致非法访问;
2、已经没使用了,却还占据着内存,导致资源紧张;

为什么会产生上面的问题呢?那就是因为COM的装载与释放是由OS集中管理的,不像我们平时NEW、DELETE可以随时随地用;
为什么要集中管理? 我猜主要的就是COM是二进制标准,内存结构“精细”,必须遵循一个统一的规范,而这套规范又特别复杂、烦琐。。。。。。



为什么这么烦?都是各自为阵惹的祸!本来计算机语言都是统一的二进制机器码,都源自同一个祖宗,本来是一家人,不需要翻译。但后来不同的子孙选择了不同的发展道路,各自独创了一门“秘功”。其实百花齐放也没什么大不了的,各自门派在自己的体系内也没什么问题。但市场不干了,它又需要把这些都能揉合起来以便能取百家之长。于是乎中间的代理人COM出现了,它也注定是一个发展过程中的产物,主要功能就在于把大家融合在一起。

记得是柳亚子说的吧:事物的发展就是一个循环往复。宇宙是一个大循环,世界是一个小循环。用到我们现在的编程语言上就是“分久必合,合久必分”。
------解决方案--------------------
> > ATL或者MFC 替你实现了
你说的是客户端调用组件吧,这样可以通过只能指针来避免AddRef和Release操作。 
但在组件内部调用另一个组件,好像不行。 

现在,最挠头的就是这个了! 
服务器端程序,如果处理不好会内存泄漏---:(

////////////
服务端也是一样啊
都替你做好了
------解决方案--------------------
先做个广告:用了都说好。。。
这是COM对象管理的一种机制,你忘记release了当然会内存泄漏,如果你想防止忘记,可以考虑用智能指针。调试的时候,你遇到AddRef或Release完全可以按F11跟踪进去看它当前的值,当然你要先把你的COM的服务器端和客户端代码都在VC里打开。