[英]What was the most useful time you used a pointer-to-pointer and/or reference-to-pointer in a c/c++ project?
[英]Difference between pointer-to-pointer vs reference-to-pointer (C++)
我有一些使用接口指針的COM代碼。 代碼的原作者實現了返回接口指針的函數,如下所示:
HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject* &pEnumerator ); // (1)
而不是傳統的
HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject** ppEnumerator ); // (2)
函數(1)被調用如下:
hRes = Query ( sQuery, pEnumerator ); // (3)
這肯定看起來不對,但它工作正常。 我不確定我是否只是拿起這一行,因為out參數不是指向輸出變量的指針,或者因為這種方法有問題。
使用引用指針而不是指針指向輸出參數是否有優勢?
優點與使用引用而不是指針相同:
Query
分配引用不會導致訪問沖突 請注意,原始描述有誤: IEnumWbemClassObject* &
是對指針的引用,而不是對引用的指針。
第一個例子是對指針的引用 ,即。 對IEnumWbemClassObject*
類型的引用:
HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject* &pEnumerator );
因此,如果將pEnumerator
聲明為IEnumWbemClassObject*
(我假設它是),則不需要將pEnumerator
的地址顯式傳遞給函數或取消引用函數內部的變量,以便更改pEnumerator
指向的位置(否則將需要IEnumWbemClassObject**
的參數IEnumWbemClassObject**
)。
對指針的引用與對任何其他類型的引用具有相同的行為,只需將上述示例視為“對指針的引用”而不是 “指向 引用的指針” 。 沒有指向引用的指針。
最好將Type &foo *視為對指針的引用而不是相反的方式,因為它不再暗示您可以通過指針和其他類似的C ++修改引用。 它還使得函數調用更容易相信,因為它就像通過引用傳遞任何其他內容一樣,不需要解除引用或特殊符號。
因為指針和引用在普通的c ++實現中表示相同(這是實現細節,但不是標准的一部分。也是它對指針的引用,而不是引用的指針,你不能創建指向引用的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.