淺拷貝與深拷貝定義

2021-10-24 07:20:33 字數 791 閱讀 8286

深拷貝

淺拷貝:對乙個物件進行clone生成新的物件,新的物件要開闢一塊新的記憶體來儲存,新物件中的基本型別屬性和string型別屬性都會開闢新的空間儲存,但是如果是引用型別的屬性,那這個引用型別的屬性還是指向原物件的引用屬性記憶體,當對新的物件或原物件的引用屬性做出改變的時候,兩方的引用屬性型別的值同時做出改變。

深拷貝:建立乙個新物件,將原物件的各個屬性的值拷貝過來。深拷貝要把複製物件所引用的物件都複製一遍。

如何區分深拷貝與淺拷貝,簡單點來說,就是假設b複製了a,當修改a時,看b是否會發生變化,如果b也跟著變了,說明這是淺拷貝。

如果b沒變,那就是深拷貝。

具體定義

只是複製物件的引用,兩個引用仍然指向同乙個物件,在記憶體空間占用同一塊記憶體。將原物件的引用直接賦值給新物件,新物件只是原物件的乙個引用。

特點

1.屬性是基本型別,拷貝的就是基本型別的值。因為基本資料型別是值傳遞,所以基本型別的拷貝,一方修改了物件的值互不影響。

2.屬性是記憶體位址(引用型別),因為引用型別是引用傳遞,拷貝的就是記憶體位址 ,因此如果其中乙個物件改變了這個位址,就會影響到另乙個物件。

定義
建立乙個新物件,將原物件的各個屬性的值拷貝過來。深拷貝要把複製物件所引用的物件都複製一遍。
特點
1.屬性是基本型別,拷貝的就是基本型別的值。因為基本資料型別是值傳遞,所以基本型別的拷貝,一方修改了物件的值互不影響。(與淺拷貝一樣)

2.屬性是引用型別,深拷貝會建立乙個物件空間,再拷貝內容。兩個物件互不影響。

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝與深拷貝

淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...