c 淺拷貝和深拷貝理解

2021-08-15 05:43:02 字數 596 閱讀 3560

為什麼c++會設定這兩種拷貝呢,因為在某些情況下,類內成員變數需要動態開闢堆記憶體,如果實行位拷貝,也就是說把物件裡的值完全複製給另乙個物件,如a=b。這時,如果b中有乙個成員變數指標已經申請了記憶體,那麼a中的那個成員變數也指向同一塊記憶體。這就出現了問題:當b把記憶體釋放了(析構),這時a記憶體就成了野指標,出現執行錯誤!

1.預設拷貝函式

#include

using namespace std;

class point

;int main()

如圖,紅色區域增加手動設定的淺拷貝函式,執行結果如下:

從執行結果來看,point p2(p1);呼叫了手動的淺拷貝建構函式

3.深拷貝函式

#include

using namespace std;

class array

};int main()

結果如圖:

理解「淺拷貝」和「深拷貝」

淺拷貝 將原物件 原陣列 的 引用 直接賦給新物件 新陣列 新物件 新陣列 是原物件 原陣列 的乙個引用。如果改變這個新物件 新陣列 原物件 原陣列 就會改變。深拷貝 將原物件的各項屬性的 值 陣列的所有元素 都拷貝給新物件 新陣列 是拷貝的 值 而不是 引用 為什麼要使用深拷貝?希望改變新物件 新...

深拷貝和淺拷貝的理解

為什麼要使用深拷貝和淺拷貝?當你想複製乙個物件時,一般做法是obj2 obj1,但是當你改動obj2的時候,會影響到obj1,而obj1也會影響到obj2,所以需要深拷貝和淺拷貝來解決物件的直接賦值仍然 連線 的問題。淺拷貝 複製乙份引用,讓所有引用物件指向乙份資料,並且可以修改這份資料,即只對指標...

深拷貝和淺拷貝的理解

物件之間賦值本質上 是物件之間的引用傳遞而已。也就是多個物件指向同乙個資料空間。淺拷貝是對乙個物件的頂層資料的拷貝。深拷貝是對於乙個物件所有層次的拷貝 遞迴 注意 型別 int型別,long型別 python3已去除long型別,只剩下int型別的資料 屬於物件,不是變數 深淺拷貝的作用 1,減少記...