淺複製與深複製

2021-10-04 06:56:21 字數 1292 閱讀 9867

1.淺複製

被複製物件的所有變數都含有與原來的物件相同的值,而其所有的對其他物件的引用都仍然指向原來的物件。

說明:乙個物件中的資料成員:

#include

using

namespace std;

class

test

test

(const test& c)

//複製建構函式,提供乙個同型別物件作為引數

void show ()}

;int

main()

3.淺複製存在的問題

#include

#include

using

namespace std;

class

test

void

seta

(int b)

void

setstr

(char

*s)void show ()}

;int

main()

執行結果

100,hello

100,hello

80,abc

100,

1.當類的資料成員含有指標型別時,淺複製建構函式存在問題。此時需要定義深複製建構函式。

2.深複製:通過乙個物件初始化另乙個物件時,不僅將被複製物件中所有非引用型別的字段複製給新物件,也將引用型別所指向位址中儲存的物件複製給新的物件。

3.深複製建構函式必須顯式定義

4.深複製建構函式的特點

① 定義:類名::類名([const] 類名 &物件名);

② 成員變數的處理:對指標型別的成員變數,使用new操作符進行空間的申請,然後進行相關的複製操作。

5.例子

#include

#include

using

namespace std;

class

test

void

seta

(int b)

void

setstr

(char

*s)void show (

)test

(const test& c)};

intmain()

執行結果

100,hello

100,hello

80,abc

100, hello

淺複製與深複製

舉個複製 的例子 function clone p,s for var prop in p return s var a var b clone a,b b.hobby 1 reading b.hobby 1 reading c.hobby 1 reading 由上面的例子可以看出,當執行淺複製時,...

深複製與淺複製

2者主要區別 是否為成員變數分配新記憶體空間 複製建構函式有2種 深複製與淺複製 當將乙個物件a複製給另乙個物件b時,系統會呼叫複製建構函式 編譯器預設的複製建構函式是淺拷貝,它將原物件的每乙個成員變數複製到新物件的成員變數中去。因而最後兩個物件的變數均指向相同的資料成員的記憶體位址。當資料成員中沒...

淺複製 深複製

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