CComPtr 通过引用传递



我遇到需要通过引用将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 ?

谢谢。

如果没有重新赋值,为什么它是引用参数?

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

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

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

是的,除非函数重新分配了值,将其设置为 NULL 或放入新值。

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

相关内容

  • 没有找到相关文章

最新更新