C 深拷貝與淺拷貝 詳解

2021-09-25 20:17:04 字數 750 閱讀 9620

#include using namespace std;

class test;

test::test(int *p,int n)

}test::~test()

void test::show()

}int main(void)

; test a(b,88);

a.show();

}

上面的拷貝建構函式不夠正規,現在寫乙個常用的拷貝建構函式:

#include

using namespace std;

class test;

test:

:test

(const test &t)

}test::~

test()

void test:

:show()

}int

main

(void);

test a

(b,88);

test b = a;

a.show()

;}

可以看出,當乙個類中有指標成員時,拷貝建構函式中必須要為該指標成員重新申請記憶體空間,即是說在堆區為他申請一塊記憶體。即需要使用深拷貝。因為,若採用淺拷貝的話,原物件的改制真變數的位址,就會指向同一塊記憶體區域,這樣的話,其中乙個物件改變了該指標所指向的資料後,另乙個物件也會受到影響。

結論:若採用拷貝建構函式時最好自己編寫一深拷貝建構函式。

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 ...