首頁 >後端開發 >C++ >複製類別時如何處理唯一指標?

複製類別時如何處理唯一指標?

Patricia Arquette
Patricia Arquette原創
2024-12-15 16:00:24698瀏覽

How to Handle Unique Pointers When Copying a Class?

複製類別中的唯一指標

複製包含唯一指標作為成員的類別需要特別考慮。唯一的指標無法共享,這需要對其內容進行深度複製或轉換為共享指標。

深度複製

深度複製方法創建一個新的唯一指針並使用原始指針內容的副本初始化它:

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中文網其他相關文章!

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