【发布时间】:2010-10-13 07:34:35
【问题描述】:
CoCreateInstance 是在我正在创建的接口上自动调用 AddRef 还是应该在之后手动调用它?
【问题讨论】:
CoCreateInstance 是在我正在创建的接口上自动调用 AddRef 还是应该在之后手动调用它?
【问题讨论】:
与 COM 的合同是任何时候你从这样的函数中获得一个对象,例如 CoCreateInstance()、QueryInterface()(这是 CoCreateInstance() 最终调用的)等,被调用者总是在调用 AddRef() 之前返回,调用者(你)总是在你完成后 Release()。
您可以使用 CComPtr 使这更简单,而且它只是做正确的事。
现在,如果您需要将此指针传递给另一个希望它在对象生命周期之后可用的对象,那么您需要在传递它之前调用 AddRef()。
我推荐Essential COM by Don Box 进一步阅读此主题。
【讨论】:
简而言之:否。
您不需要在您的代码中调用AddRef。
COM 对象 的引用计数器在CoCreateInstance 之后为1。
所以,如果你调用Release,引用计数器将为0,COM对象将被释放。
【讨论】:
规则的一个例外:CComObject::CreateInstance() 不执行 AddRef。调用后必须这样做。
【讨论】: