CComPtr通过引用传递

时间:2012-04-11 11:21:43

标签: c++ atl smart-pointers winapi xmllite

我有一种情况需要通过引用将CComPtr<IXmlReader>传递给函数。被调参数是否从被调用者参数中获取所有权(或)参考计数是否增加?

void foo( CComPtr<IXmlReader> & pReader )
{
  // There is no reassignment of the CComPtr.
  // Just call the IXmlReader methods.
}

CComPtr<IXmlReader> pReader;
foo( pReader );

// Is pReader still valid after the function return ?

感谢。

2 个答案:

答案 0 :(得分:1)

如果没有重新分配,为什么它是参考参数?

无论如何,引用计数没有变化。是的,CComPtr在返回后仍然有效。

答案 1 :(得分:0)

没有引用计数受到调用本身的影响,它只是内部函数操作与指针可能正在添加或释放对象的引用数。

  

//函数返回后pReader是否仍然有效?

是的,除非该功能重新分配了该值,将其设置为NULL或将新值放入其中。

即使在仅输入中的参数,也有一个程序员通过这种方式传递参数的奖励:(1)你完全停留在智能指针的范围内,你不需要担心正确的引用计数( 2)例如,你有断言失败尝试->未初始化的指针(3)发布构建优化将/可能生成几乎与您使用原始指针相同的快速代码。