複製類別中的唯一指標
複製包含唯一指標作為成員的類別需要特別考慮。唯一的指標無法共享,這需要對其內容進行深度複製或轉換為共享指標。
深度複製
深度複製方法創建一個新的唯一指針並使用原始指針內容的副本初始化它:
class A { std::unique_ptr<int> up_; public: A(int i) : up_(new int(i)) {} A(const A& a) : up_(new int(*a.up_)) {} };
這裡, A 的複製建構子深層複製原始唯一指標所指向的int。
轉換為共用指標
或者,您可以將唯一指標轉換為共用指針,這允許在多個物件之間共用:
class B { std::unique_ptr<int> up_; public: B(int i) : up_(new int(i)) {} B(const B& b) { up_ = std::make_shared(*b.up_); } };
在此範例中,B 的複製建構函式將唯一指標轉換為共用指標指針,使B 的多個副本能夠存取相同的基礎資料。
其他運算子
為了與容器(如std::vector)無縫運作,通常需要附加運算子必填:
移動建構子:
B(B&& b) { up_ = std::move(b.up_); }
複製賦值:
B& operator=(const B& b) { up_ = std::make_shared(*b.up_); return *this; }
移動賦值:
B& operator=(B&& b) { up_ = std::move(b.up_); return *this; }
這些運算符確保🎜>各種上下文中安全地賦值和複製物件。
以上是複製類別時如何處理唯一指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!