深複製淺複製

2021-08-30 21:57:39 字數 608 閱讀 3735

淺複製

所謂的淺拷貝就是拷貝指向物件的指標,意思就是說:拷貝出來的目標物件的指標和源物件的指標指向的記憶體空間是同一塊空間.

淺拷貝只是一種簡單的拷貝,讓幾個物件公用乙個記憶體,然而當記憶體銷毀的時候,指向這個記憶體空間的所有指標需要重新定義,不然會造成野指標錯誤

深複製所謂的深拷貝指拷貝物件的具體內容,其內容位址是自助分配的,拷貝結束之後,記憶體中的值是完全相同的,但是記憶體位址是不一樣的,兩個物件之間相互不影響,也互不干涉.

二者原理

如果現在有乙個a物件,拷貝之後得到乙份新的物件a_copy,如果時淺拷貝,那麼a物件和a_copy物件指向的就是同乙個記憶體的資源,它拷貝的只是乙個指標而已,物件的內容並沒有拷貝.也就是說物件的資源還是只有乙份.如果這個時候我們對a_copy物件進行修改操作,那麼a物件的內容同樣會被修改.然而如果是深拷貝,拷貝的不僅僅是指標,還有內容,拷貝的物件b_copy會自助分配記憶體,兩個物件的指標指向的是不同的記憶體空間,因為a物件和b_copy物件的記憶體位址是不一樣的,所以,如果我們對b_copy進行修改操作的話是不會影響到a物件,它們之間是互不干涉的

淺拷貝就想是您和您的影子之間的關係 : 你掛了, 你的影子也跟著掛了

深拷貝就像是您的複製人, 你掛啦, 可你的複製人還活著

淺複製 深複製

second,來說說shallow copy and deep copy的定義和我自己的一些理解。僅供參考 淺複製 shallow copy 如果欄位是值型別的。則對該字段執行逐位複製,如果欄位是引用型別,則複製引用但不複製引用的物件 因此,原始物件及其副本引用同一物件。即被複製物件的所有變數都含有...

深複製 淺複製

深複製又叫深拷貝 淺複製又叫淺拷貝 位拷貝。為了理解什麼叫深複製和淺複製,我們舉乙個例子,假如我們有乙個類叫cdemo,有兩個成員,a 和 str.class cdemo 我們再定義乙個建構函式 cdemo int pa,char cstr 然後執行 cdemo a 10,hello cdemo b...

淺複製和深複製

在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...