是公有函式,用於建立物件時使用同類物件來初始化新物件
用法:類名 + (const 類名& 物件名)
特徵:是建構函式的過載、單參、必須傳物件的引用否則會一直遞迴下去、如果沒有顯式定義則編譯器會預設生成
對於拷貝建構函式,如果不顯示給出則編譯器預設給出,但是編譯器給出的拷貝建構函式進行的僅僅是值拷貝(位拷貝)
一般情況下,淺拷貝沒有問題,但如果有指標成員還用淺拷貝的話就會出錯。見名知意,拷貝拷貝,對於指標成員,也是拷貝,不過僅僅是複製了另乙個指標指向相同的資源,可能有人會想兩個指標指向同一塊資源怎麼了,沒問題啊。但是別忘了建構函式操作的是物件,物件是構造出來的,那用完了就必然得銷毀,銷毀就要呼叫析構函式,析構的時候用一塊位址被釋放兩次能不出錯嗎?
深拷貝與淺拷貝的區別是在拷貝的時候不僅拷貝了值,還將資源也拷貝乙份,這樣就不會出現上面的情況。但是深拷貝必須由自己來實現
深淺拷貝以及深淺拷貝的方法
先考慮一種情況,對乙個已知物件進行拷貝,編譯系統會自動呼叫一種建構函式 拷貝建構函式,如果使用者未定義拷貝建構函式,則會呼叫預設拷貝建構函式。執行結果 呼叫一次建構函式,呼叫兩次析構函式,兩個物件的指標成員所指記憶體相同,name指標被分配一次記憶體,但是程式結束時該記憶體卻被釋放了兩次,會造成記憶...
拷貝和深淺拷貝
當list2為list的拷貝物件時,list內的可變資料型別變化,list2變化 list內的不可變資料型別變化,list2變化。總之 list變化list2一定變化 list 1,2,3,4,list2 list print list print list2 1,2,3,4,5 1,2,3,4,5...
12 深淺拷貝
複製物件的基本概念 複製乙個物件作為副本,它會開闢一塊新的記憶體 堆記憶體 來儲存副本物件,就像複製檔案一樣.即源物件和副本物件是兩塊不同的記憶體區域.物件具備複製功能,必須實現協議,協議.常用的可複製物件有 nsnumber,nsstring,nsarray,nsdictionary.nsmuta...