CoCreateInstance是否会在我正在创建的界面上自动调用AddRef,或者我应该在之后手动调用它?
答案 0 :(得分:25)
与COM签订合同的任何时候你都可以从像这样的函数传递一个对象,例如CoCreateInstance(),QueryInterface()(这是CoCreateInstance(最终调用的))等,被调用者总是先调用AddRef()返回时,调用者(你)在完成后总是释放()。
您可以使用CComPtr<>使这更简单,它只做正确的事。
现在,如果您需要将此指针移交给另一个期望在对象的生命周期内可用的对象,那么您需要在发出之前调用AddRef()。
我建议Essential COM by Don Box进一步阅读此主题。
答案 1 :(得分:9)
答案 2 :(得分:4)
规则的一个例外:CComObject<> :: CreateInstance()不执行AddRef。你打电话后必须这样做。