我有一种情况需要通过引用将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 ?
感谢。
答案 0 :(得分:1)
如果没有重新分配,为什么它是参考参数?
无论如何,引用计数没有变化。是的,CComPtr在返回后仍然有效。
答案 1 :(得分:0)
没有引用计数受到调用本身的影响,它只是内部函数操作与指针可能正在添加或释放对象的引用数。
//函数返回后pReader是否仍然有效?
是的,除非该功能重新分配了该值,将其设置为NULL
或将新值放入其中。
即使在仅输入中的参数,也有一个程序员通过这种方式传递参数的奖励:(1)你完全停留在智能指针的范围内,你不需要担心正确的引用计数( 2)例如,你有断言失败尝试->
未初始化的指针(3)发布构建优化将/可能生成几乎与您使用原始指针相同的快速代码。