深拷貝與淺拷貝

2022-05-12 14:09:01 字數 509 閱讀 4542

首先通過一句話來解釋:深拷貝就是內容拷貝,淺拷貝就是指標拷貝。

深拷貝就是拷貝出和原來僅僅是值一樣,但是記憶體位址完全不一樣的新的物件,建立後和原物件沒有任何關係。淺拷貝就是拷貝指向原來物件的指標,使原物件的引用計數+1,可以理解為建立了乙個指向原物件的新指標而已,並沒有建立乙個全新的物件。

(1)非容器類物件的深拷貝、淺拷貝

對於字串這類非容器類物件,copy是淺拷貝,mutable是深拷貝。

對於mutablestring,無論是copy還是mutablecopy,都會建立乙個新物件,都是屬於深拷貝。

對於可變物件的複製,都是深拷貝;

-- 可變物件copy後返回的物件是不可變的,mutablecopy後返回的物件是可變的。

(2)非容器類物件的深拷貝、淺拷貝

-- 容器物件和非容器物件類似,可變物件複製(copy,mutablecopy)的都是乙個新物件;不可變物件copy是淺複製,mutablecopy是深複製。

-- 對於容器而言,元素物件始終是指標複製。

「淺拷貝」與「深拷貝」

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...