2012-04-11 30 views
0

我有一種情況,我需要通過CComPtr<IXmlReader>通過引用功能。被調用的參數是否從被調用者參數獲取所有權(或)引用計數是否增加?CComPtr通過引用

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 ? 

謝謝。

回答

1

如果沒有重新分配,爲什麼它是一個參考參數?

無論如何,引用計數沒有變化。是的,CComPtr在返回後仍然有效。

+0

也許他意味着通過const參考傳遞性能的原因。 – 01100110 2012-04-11 11:37:34

+0

如果在foo函數中不需要引用計數(更改指針的值),並且擔心引用計數開銷,那麼我只需將該參數設置爲簡單指針(非CComPtr包裝指針)即可。 – dsharlet 2012-04-11 16:59:10

0

沒有引用計數受調用本身的影響,它只是用指針進行內部函數操作,它可能會增加或釋放對象的引用數量。

//函數返回後pReader仍然有效嗎?

是的,除非函數重新賦值,將其設置爲NULL或將其放入一個新值。

即使參數僅用於輸入,在傳遞參數時也存在程序員的獎勵:(1)您完全停留在智能指針的範圍內,並且您不必擔心適當的引用計數(2)你有斷言失敗的例如試圖->一個未初始化的指針(3)發佈構建優化將/可能會生成幾乎與使用原始指針一樣快的代碼。