我遇到需要通过引用将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)发布构建优化将/可能生成几乎与使用原始指针一样快的代码。