深拷貝與淺拷貝

2021-09-13 02:59:27 字數 364 閱讀 4942

​​​​淺拷貝

只是拷貝了基本型別的資料

,而引用型別資料,複製後也是會發生引用,換句話說,淺複製僅僅是指向被複製的記憶體位址,如果原位址中物件被改變了,那麼淺複製出來的物件也會相應改變。

深拷貝在計算機中開闢了一塊新的記憶體位址用於存放複製的物件。

若類內成員變數

需要動態開闢堆記憶體

,如果把物件裡的值完全複製給另乙個物件,則

指向同一塊記憶體

。如果此時乙個

把記憶體釋放了(如:析構),這時另乙個的指標就是野指標了。

如果使用者未定義拷貝建構函式,則呼叫c++提供的預設拷貝建構函式,是個淺拷貝,解決方案是手工編寫拷貝建構函式,使用深拷貝,使用malloc重新分配一塊記憶體。

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝與深拷貝

淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...