首頁 > 後端開發 > C++ > 如何正確複製包含 `unique_ptr` 成員的 C 11 類別?

如何正確複製包含 `unique_ptr` 成員的 C 11 類別?

Barbara Streisand
發布: 2024-12-03 00:30:10
原創
894 人瀏覽過

How to Properly Copy C  11 Classes Containing `unique_ptr` Members?

在C 11 複製具有唯一指標的類別

為包含unique_ptr 的類別建立複製建構函數,unique_ptr 是一個強制獨佔所有權的智慧指針,提出了獨特的挑戰。在 C 11 中,管理 unique_ptr 成員需要仔細考慮。

解決方案:

要實現複製建構函數,您有兩個選擇:

  1. 深層複製: 建立unique_ptr 內容的新副本。這確保兩個物件獨立地擁有自己的資料。
class A {
  std::unique_ptr<int> up_;
public:
  A(int i) : up_(new int(i)) {}
  A(const A& a) : up_(new int(*a.up_)) {}
};
登入後複製
  1. 轉換為shared_ptr:將unique_ptr轉換為shared_ptr,這允許多個所有者。
std::shared_ptr<int> sp = std::make_shared<int>(*up_);
登入後複製

額外注意事項:

  • 移動建構子:您可以使用移動建構子來取代複製建構函數,它會轉移unique_ptr 的所有權。
A(A&& a) : up_(std::move(a.up_)) {}
登入後複製
  • 重載其他運算子:對於一組完整的操作,重載賦值運算子會很有幫助。
A& operator=(const A& a) { up_.reset(new int(*a.up_)); return *this; }
A& operator=(A&& a) { up_ = std::move(a.up_); return *this; }
登入後複製
  • 向量注意事項:如果您打算在 std 中使用您的類別: :vector,決定該向量是否獨佔該物件。您可以省略複製建構函式和複製賦值運算子來強制執行僅移動行為。

以上是如何正確複製包含 `unique_ptr` 成員的 C 11 類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板