為什麼拷貝建構函式必須為引用傳遞,不能是值傳遞
簡單的回答bai是為了防止遞迴引用。du
具體一些zhi可以這麼講:
當 乙個dao物件需要zhuan以值方式傳遞時,編譯shu器會生成**呼叫它的拷貝建構函式以生成乙個複本。如果類a的拷貝建構函式是以值方式傳遞乙個類a物件作為引數的話,當 需要呼叫類a的拷貝建構函式時,需要以值方式傳進乙個a的物件作為實參;
而以值方式傳遞需要呼叫類a的拷貝建構函式;結果就是呼叫類a的拷貝建構函式導 致又一次呼叫類a的拷貝建構函式,這就是乙個無限遞迴。
編譯器預設的拷貝構造做的淺拷貝,可能會帶來堆區記憶體重複釋放。
深淺拷貝問題 拷貝建構函式
深拷貝 在堆區重新申請空間,進行拷貝操作 淺拷貝 簡單的複製拷貝操作 class person person int age person int m age void test 當引數中有堆區引數,改造之後 class person person int age,int height person...
拷貝建構函式,預設拷貝建構函式
拷貝建構函式,預設拷貝建構函式 1.c 的預設拷貝建構函式,從深度拷貝和淺拷貝說起 c 類的預設拷貝建構函式的弊端 c 類的中有兩個特殊的建構函式,1 無參建構函式,2 拷貝建構函式。它們的特殊之處在於 1 當類中沒有定義任何建構函式時,編譯器會預設提供乙個無參建構函式且其函式體為空 2 當類中沒有...
拷貝和深淺拷貝
當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...