C 學習 深拷貝與淺拷貝

2021-07-26 09:57:46 字數 546 閱讀 2475

c++中在類中預設的拷貝函式(系統自動生成的),這就是淺拷貝。只是簡單的將成員內容複製。例如下面的**

#include #include using namespace std;

class array

array(const array& arr)

~arrat()
};

using namespace std;

int main()

這這array類中就是使用的預設的拷貝函式。這裡成員中如果只有icount 就不會出現任何問題。但是這裡有乙個
int * p = new int[icount];
;這個是乙個在堆區的記憶體申請。這裡首先p是沒問題的,但是用p來例項化p1就出問題了,icount正常複製,但是下面那個成員就只是簡單的將指標位址賦值給他。然後兩個物件中的指標成員指向了同乙個記憶體區域。於是在物件銷毀時,同乙個記憶體區域就會釋放兩次,這就導致了程式的崩潰。

C 深拷貝 與 淺拷貝

最近在寫一些c 程式,遇到個問題,記憶體會出錯,查了一些材料,終於發現問題所在了,原來碰到了傳說中的深拷貝和淺拷貝問題了,檢視一些材料,現在對這個問題做個總結 在類定義中,預設是淺拷貝,即 位拷貝 用在基本類中或者一些沒有指標的自定義型別中沒有一點問題,但是當遇到含有指標變數的自定義型別的時候,就會...

C 淺拷貝與深拷貝

淺拷貝 shallow copy 指的是當物件的字段被拷貝的時候,字段應用的物件不會被拷貝。深拷貝是對物件例項當中的字段引用的物件也進行拷貝的一種方式。淺拷貝可以通過將類實現介面icloneable class myclass icloneable 舉個簡單的例項 using system usin...

c 深拷貝與淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。iostream using namespace std class cexample void show ...