C 拷貝建構函式 深拷貝與淺拷貝 詳解

2021-06-26 17:32:45 字數 687 閱讀 8066

深拷貝和淺拷貝可以簡單理解為:如果乙個類擁有資源,當這個類的物件發生複製過程的時候,資源重新分配,這個過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如:

int a=88;

int b=a;

而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。  

#include using namespace std;

class cexample

void show ()

cexample(const cexample& c)

void show ()

ca(const ca& c)

void show()

{   cout<

淺拷貝資源後在釋放資源的時候會產生資源歸屬不清的情況導致程式執行出錯。

test(test &c_t)是自定義的拷貝建構函式,拷貝建構函式的名稱必須與類名稱一致,函式的形式引數是本型別的乙個引用變數,且必須是引用。

當用乙個已經初始化過了的自定義類型別物件去初始化另乙個新構造的物件的時候,拷貝建構函式就會被自動呼叫,如果你沒有自定義拷貝建構函式的時候,系統將會提供給乙個預設的拷貝建構函式來完成這個過程,上面**的複製核心語句就是通過test(test &c_t)拷貝建構函式內的p1=c_t.p1;語句完成的。

C 拷貝建構函式 深拷貝與淺拷貝

深拷貝函式主要是解決拷貝函式不能直接拷貝指標所指記憶體的資料的問題 其次,介紹一下什麼是拷貝建構函式以及拷貝建構函式將在何時被呼叫?拷貝建構函式是一種特殊的建構函式,其形參是本類物件的引用,其作用是使用乙個已經存在的物件來初始化 乙個新的同類的物件。何時被呼叫?當用類的物件去初始化另外乙個物件的時候...

拷貝建構函式,深拷貝與淺拷貝

一.拷貝建構函式 先直接來看 include include help.h using namespace std class line private char msg line line const char msg line line const line line line line voi...

C 拷貝建構函式 深拷貝,淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。執行程式,螢幕輸出100。從以上 的執行結果可以看出,系統為物件b分配了記憶體並完成了與物件a的複製過程。就...