首頁 >後端開發 >C++ >'unique_ptr”參數應該如何在 C 建構函式和函式中傳遞?

'unique_ptr”參數應該如何在 C 建構函式和函式中傳遞?

Barbara Streisand
Barbara Streisand原創
2024-12-18 10:08:11207瀏覽

How Should `unique_ptr` Parameters Be Passed in C   Constructors and Functions?

如何在建構函式和函式中處理 unique_ptr參數

場景

考慮一個類別將自身引用為如下:

class Base {
public:
  typedef unique_ptr<Base> UPtr;

  Base() {}
  Base(Base::UPtr n) : next(std::move(n)) {}

  virtual ~Base() {}

  void setNext(Base::UPtr n) {
    next = std::move(n);
  }

protected:
  Base::UPtr next;
};

傳遞unique_ptr 參數的方法

要有效使用unique_ptr參數,請考慮以下方法:

1.按值(A)

Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
當作為Base newBase(std::move(nextBase)); 呼叫時,此方法將指標的所有權轉移給函數。建置完成後,nextBase 變為空。

2.透過非常量左值引用(B)

Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
這需要一個實際的左值(命名變數)並允許函數潛在地宣告指標的所有權。

3。透過 const 左值引用 (C)

Base(std::unique_ptr<Base> const &n);
這可以防止函數儲存指針,但保證在執行期間存取該物件。

4。以右值參考 (D)

Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
與 (B) 類似,但在傳遞非暫時參數時需要使用 std::move。該函數可能會也可能不會聲明所有權。

建議

  • 將所有權轉移給函數時應使用方法(A) .

方法(C)

推薦用於僅使用unique_ptr 的持續時間。

方法 (D) 應避免,因為它在所有權轉移方面不明確。 操作 unique_ptr要移動 unique_ptr,請使用 std::move。這可以避免複製並確保所有權的正確轉移。

以上是'unique_ptr”參數應該如何在 C 建構函式和函式中傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn