MSDN article表示当COM服务器调用它时,不释放客户端引用的类对象。然后是以下内容:
如果其他客户端仍然有指向类对象的指针并且通过调用IUnknown :: AddRef导致引用> count增加,则引用计数将不会是>零。发生这种情况时,如果后续调用(对IUnknown :: AddRef和IUnknown :: Release有明显的>例外)失败,应用程序可能会受益。
“应用程序可能会从中受益”是什么意思?类对象未释放,但创建请求失败。听起来很合理,但有什么好处?
答案 0 :(得分:0)
是的,这是一个非常奇怪的词汇......
我认为他们试图说的是,如果客户从刚刚调用CoRevokeClassObjects
的服务器创建对象,那么客户可能会陷入棘手的境地,因为它很可能会很快消失({{当服务器关闭时,例行调用1}}。
因此,如果激活调用(CoRevokeClassObjects
)没有失败,客户端将返回一个接口指针,一旦它们调用了一个方法,它们就会从RPC中获得错误服务器已经消失的层。
我认为这在某种程度上是“有益的”: - )
那就是说,我不确定如何检测通过IClassFactory::CreateInstance
与其他客户端调用IUnknown::Release
的情况,但我想撤销工厂的代码可以设置一些全局状态或者 - 在让创作请求通过之前他们可以检查的状态。