使用唯一指標作為函數參數
唯一指標在 C 11 中提供記憶體管理功能。當傳遞 unique_ptr 作為函數參數時,有幾種需要考慮的方法,每種方法都有不同的意義。
以值傳遞(所有權轉移)
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
呼叫此建構子需要以值傳遞指針,有效地將其所有權轉移給函數:
Base newBase(std::move(nextBase));
此操作後,nextBase 將是空,因為unique_ptr 的所有權已轉移。
透過非常量L 值傳遞參考(所有權歧義)
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
這種方法需要一個實際的L 值(命名變數)作為參數:
Base newBase(nextBase);
在這種情況下,不確定是否該函數將聲明或不聲明該指標的所有權。 Base::Base(std::unique_ptr
透過 Const L 值參考傳遞(無所有權轉移)
Base(std::unique_ptr<Base> const &n);
傳遞 const L 值參考可防止函數宣告指標的所有權。此函數可以存取指向的對象,但不能修改其值。
透過 R 值參考傳遞(潛在所有權轉移)
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
這種方法類似於透過非常量 L 值參考傳遞。它允許傳遞臨時物件:
Base newBase(std::unique_ptr<Base>(new Base)); // Legal
但是,在傳遞非臨時參數時需要使用 std::move 。該函數可能會或可能不會聲明指標的所有權,這再次使其行為在不檢查實現的情況下不太明顯。
建議
操縱唯一值指標
操作唯一指標:
以上是我應該如何在 C 中將唯一指標作為函數參數傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!