引用计数

当 COM 认为对象不再使用时,不会自动尝试从内存中删除对象。 相反,对象程序员必须删除未使用的对象。 程序员根据引用计数确定是否可以删除对象。

COM 使用 IUnknown 方法、AddRefRelease 来管理对象上的接口的引用计数。 调用这些方法的一般规则包括:

  • 每当客户端收到接口指针时,都必须在接口上调用 AddRef

  • 每当客户端使用完接口指针时,都必须调用 Release

在简单的实现中,每个 AddRef 调用递增对象内的计数器变量,而每个 Release 调用递减该变量。 当计数返回到零时,该接口不再具有任何用户,并且可随时把自己从内存中删除。

还可以实现引用计数,以便对每个对象引用(不包括对对单个接口的引用)进行计数。 在这种情况下,每个 AddRefRelease 调用会委托到对象上的中心实现,并且在引用计数达到零时 Release 会释放整个对象。

注意

使用 new 运算符构造 CComObject 派生对象时,引用计数为 0。 因此,成功创建 CComObject 派生对象后必须调用 AddRef

另请参阅

COM 简介
通过引用计数管理对象生命周期