首頁 > 後端開發 > C++ > 主體

深複製與淺複製:何時需要資料的真實副本?

Barbara Streisand
發布: 2024-10-27 11:01:30
原創
901 人瀏覽過

 Deep Copy vs. Shallow Copy: When Do I Need a True Copy of My Data?

深拷貝與淺拷貝

問題:

兩者之間的主要區別是什麼深拷貝和淺拷貝?

答案:

淺拷貝:

  • 複製物件的值但保留對共享物件的參考。
  • 範例:

    <code class="c++">class X {
    private:
      int i;
      int *pi;
    public:
      X() : pi(new int) {}
      X(const X& copy) : i(copy.i), pi(copy.pi) {}
    };</code>
    登入後複製

    在此淺複製中, pi 在原始物件和複製物件中引用相同的 int 物件。

深度複製:

  • 建立原始物件的完整副本,包括所有嵌入物件。
  • 範例:

    <code class="c++">class X {
    private:
      int i;
      int *pi;
    public:
      X() : pi(new int) {}
      X(const X& copy) : i(copy.i), pi(new int(*copy.pi)) {}
    };</code>
    登入後複製

    在此深度複製中,pi 指向一個新的 int 對象,其值與原始對象相同。

複製建構子類型:

預設的複製建構子取決於每個成員的複製建構子的行為:

  • 對於標量類型,使用預設的賦值運算符,產生淺複製。
  • 但是,嚴格來說預設的複製建構子總是執行淺複製並不正確。它可以實現深複製,甚至深淺複製的組合,這取決於成員類型的複製行為。

範例:

In在下面的範例中,預設的複製建構函式由於其實作而為std::vector 成員建立了一個深層副本:

<code class="c++">class Y {
private:
    std::vector<int> v;
public:
    Y() {}
    Y(const Y& copy) : v(copy.v) {}
};</code>
登入後複製

在這種情況下,std::vector 的複製建構函式為其建立了一個深層副本內容。

以上是深複製與淺複製:何時需要資料的真實副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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