在COM中:我应该在CoCreateInstance之后调用AddRef吗?

时间:2009-03-14 03:17:45

标签: c++ com

CoCreateInstance是否会在我正在创建的界面上自动调用AddRef,或者我应该在之后手动调用它?

3 个答案:

答案 0 :(得分:25)

与COM签订合同的任何时候你都可以从像这样的函数传递一个对象,例如CoCreateInstance(),QueryInterface()(这是CoCreateInstance(最终调用的))等,被调用者总是先调用AddRef()返回时,调用者(你)在完成后总是释放()。

您可以使用CComPtr<>使这更简单,它只做正确的事。

现在,如果您需要将此指针移交给另一个期望在对象的生命周期内可用的对象,那么您需要在发出之前调用AddRef()。

我建议Essential COM by Don Box进一步阅读此主题。

答案 1 :(得分:9)

简而言之:

需要在代码中致电AddRef

COM对象的参考计数器在CoCreateInstance之后为1。

因此,如果你调用Release,引用计数器将为0并且将丢弃COM对象。

答案 2 :(得分:4)

规则的一个例外:CComObject<> :: CreateInstance()不执行AddRef。你打电话后必须这样做。