C 拷貝物件

2021-07-09 02:12:54 字數 1967 閱讀 5017

物件的建立中,常常有這樣的需求,就是把物件複製乙份。

而複製有三種方法:

1.通過初始化來複製

例如:object o1(10); object o2=o1;

2.通過賦值來複製

例如:object o1(10); object o2; o2=o1;

3.通過預設拷貝函式來複製

例如:object o1(10); object o2(o1);

實際上,第一種方法內部原理是執行了第三種的拷貝函式,預設的拷貝函式是淺拷貝,也就是說只能對基本型別數值進行拷貝object類如下:

class

object

};

1.首先 object o2=o1 這句是先執行了o1的預設拷貝函式

此處o1的預設拷貝函式申明為: object(const object& obj),該實現體為編譯器預設的淺複製方法實現,因此對於含有複雜變數的類,需要重寫該函式

2.然後執行o1的拷貝函式後返回乙個匿名物件

3.最後將該匿名物件命名為o2

*該原理較為簡單,就是直接將簡單基本變數值拷貝乙份賦值給拷貝物件

*第一種原理已解釋

*這段**在較為嚴格的編譯器中會報錯,這是因為預設拷貝函式是淺拷貝,對基本的值進行拷貝

*然而o2拷貝o1的值時,拷貝的是_name的值,在棧中也就是字串的位址值,因此拷貝後的o2的_name只是引用了o1的_name指向的字串

*因此在test函式結束時,首先o2被析構,其_name指向的字串被**。然後o1被析構,其_name指向的字元已在o2析構時被**,因此o1的_name是野指標,因此產生錯誤。

C 物件的拷貝

在程式設計中,我們有時希望得到現有乙個物件的拷貝。拷貝有兩種 1 淺拷貝 也稱淺表複製 2 深拷貝 也稱深度複製 1.淺拷貝 表示將所有非引用資料型別從乙個物件複製到另乙個物件 如果原有物件包含對像引用,則複製對角引用 即是指當物件的字段值被拷貝時,欄位的引用物件不會被拷貝 形成拷貝後的物件與原物件...

C 物件的拷貝

在程式設計中,我們有時希望得到現有乙個物件的拷貝。拷貝有兩種 1 淺拷貝 也稱淺表複製 2 深拷貝 也稱深度複製 1.淺拷貝 表示將所有非引用資料型別從乙個物件複製到另乙個物件 如果原有物件包含對像引用,則複製對角引用 即是指當物件的字段值被拷貝時,欄位的引用物件不會被拷貝 形成拷貝後的物件與原物件...

C 物件的構建 淺拷貝與深拷貝

一 關於創造物件的時候初始值,物件的初始化值到底是多少,這個得看物件創造的是在 創造,假如沒有對建立的物件進行初始化,那麼它的初始值是多少呢?1 假如是在靜態儲存區,那麼就為0。2 假如是在棧上,或者是堆上,那麼就為隨機值 二 在生活中,物件都是初始化了之後才上市的,那麼問題就來了,程式如何對乙個物...