0

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

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 ?

谢谢。

4

2 回答 2

1

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

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

于 2012-04-11T11:26:59.157 回答
0

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

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

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

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

于 2012-04-11T19:46:43.277 回答