深複製 淺複製

2021-07-25 13:57:34 字數 1301 閱讀 6471

深複製又叫深拷貝;淺複製又叫淺拷貝、位拷貝。為了理解什麼叫深複製和淺複製,我們舉乙個例子,假如我們有乙個類叫cdemo,有兩個成員,a 和 str.

class

cdemo

;

我們再定義乙個建構函式

cdemo(int pa,char *cstr)

然後執行

cdemo a(10,"hello");

cdemo b = a

; cout <

<< a.a

<

<

cout <

<< b.a

<

執行結果我們可以看到,完成了複製。

然後我們再執行以下**,將b物件的a置為8,str的第乙個字元置為『k』,然後我們列印物件a和物件b。

b.a = 8

;b.str[0] = 'k'

;

輸出的結果:

我們看到乙個問題,修改以後,a物件的字串也被修改了,這是為什麼呢?

這是由於,當我們沒有定義複製建構函式時,c++會幫我們生成乙個複製建構函式,叫做合成建構函式。但是合成建構函式僅僅只能實現淺拷貝

淺拷貝

我們可以看到只是實現了指標的複製,兩個指標實際上指向了同一塊記憶體。淺拷貝存在的問題是,當兩個物件其中有乙個執行了析構函式,釋放了記憶體,那麼另外乙個就成了懸垂指標,也就是野指標。

深拷貝

而我們要實現的是深拷貝。

所以我們要定義自己的複製建構函式,來實現複製。

cdemo(cdemo& obj)

同時遵循三法則,定義析構函式,釋放記憶體

cdemo::~cdemo()

這個時候再執行,就會發現a物件的str並沒有被修改。

淺複製 深複製

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

深複製淺複製

淺複製 所謂的淺拷貝就是拷貝指向物件的指標,意思就是說 拷貝出來的目標物件的指標和源物件的指標指向的記憶體空間是同一塊空間.淺拷貝只是一種簡單的拷貝,讓幾個物件公用乙個記憶體,然而當記憶體銷毀的時候,指向這個記憶體空間的所有指標需要重新定義,不然會造成野指標錯誤 深複製所謂的深拷貝指拷貝物件的具體內...

淺複製和深複製

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