淺複製與深複製

來源:互聯網
上載者:User

    淺複製指的是完全按照記憶體中的資料內容進行的複製行為,即無論原資料類型是什麼,都忠實地將其複製到目標記憶體地區中。C++編譯器預設的複製建構函式以及賦值函數執行的都是淺複製。如:

class A{public:A(int i):m(i){}private:int m;};A a(2);A b(a);

    淺複製對於指標會存在問題:指標被複製而不是指標所指的對象被複製,即指標類型資料的內容是一個記憶體位址,如果原樣複製則意味著兩個不同的指標成員指向了同一塊記憶體地區,如p2 = p1; 指標p2指向了指標p1指向的空間,如果這個空間不存在了,那麼p2的指向就沒有任何意義了,這個時候就需要深複製來處理。

    深複製指的是,如果要複製的內容是指標,那麼重新開闢一塊記憶體空間,將原指標指向的記憶體空間的內容複寫到目標指標指向的新的記憶體空間中。這樣一來,兩個指標指向的記憶體空間的值是一致的,但他們分別是獨立的記憶體空間,互不干擾。如:

String::String(const String & str) //複製建構函式{int len = strlen(str.m_data);m_data = new char[len + 1]; //申請數組strcpy(m_data, str.m_data); //複製數組}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.