深拷貝和淺拷貝的區別

2021-08-09 18:44:12 字數 1223 閱讀 3703

深淺拷貝的區別:

淺拷貝是將原始物件中的資料型字段拷貝到新物件中去,將引用型字段的「引用」複製到新物件中去,不把「引用的物件」複製進去,所以原始物件和新物件引用同一物件,新物件中的引用型字段發生變化會導致原始物件中的對應欄位也發生變化。

深拷貝是在引用方面不同,深拷貝就是建立乙個新的和原始欄位的內容相同的字段,是兩個一樣大的資料段,所以兩者的引用是不同的,之後的新物件中的引用型字段發生改變,不會引起原始物件中的字段發生改變。

結果:一次構造

兩次析構

編譯系統在我們自己沒有自定義拷貝建構函式時,會在拷貝物件時候呼叫預設拷貝建構函式,進行淺拷貝,即對指標name拷貝後出現兩個指標指向同乙個記憶體塊。所以析構時候就析構了兩次,導致記憶體洩漏。

所以在對「含有指標成員的物件」進行拷貝時,必須要自己定義拷貝建構函式,使拷貝構造後的物件指標成員有自己的記憶體空間,即進行深拷貝,避免記憶體洩漏。

結果:構造一次

拷貝構造一次

析構兩次

綜上所述,淺拷貝是只對指標進行拷貝,兩個指標指向同乙個記憶體塊,深拷貝是對指標和指標指向的內容都進行拷貝,拷貝後的指標是指向不同內的指標。

深拷貝和淺拷貝的區別

retain屬性表示兩個物件位址相同 建立乙個指標,指標拷貝 內容當然相同,這個物件的retain值 1也就是說,retain 是指標拷貝 淺拷貝 copy 是內容拷貝 深拷貝 ios中並不是所有的物件都支援copy,mutablecopy,遵守nscopying 協議的類可以傳送copy訊息,遵守...

深拷貝和淺拷貝的區別

一.深拷貝 源物件和副本物件是不同的兩個物件 源物件引用計數不變,副本物件計數器為1 因為是新產生的 至少有一層是物件複製 二.淺拷貝 源物件和副本物件是同乙個物件 源物件 副本物件 引用計數器 1,相當於做一次retain操作 本質 沒有產生新的物件 三.完全複製 對於被複製的物件每一層都是物件複...

深拷貝和淺拷貝的區別

淺拷貝,即在定義乙個類 a,使用類似 a obj a obj1 obj 或者a obj1 obj 時候,由於沒有自定義拷貝建構函式,c 編譯器自動會產生乙個預設的拷貝建構函式。這個預設的拷貝建構函式採用的是 位拷貝 淺拷貝 而非 值拷貝 深拷貝 的方式,如果類中含有指標變數,預設的拷貝建構函式必定出...