5 c 拷貝建構函式 深拷貝,淺拷貝

2021-05-23 16:12:21 字數 914 閱讀 4815

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

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++ 中,賦值和拷貝是不同的,

拷貝建構函式是對未初始化的記憶體進行初始化操作

而賦值是對現有的已經初始化的物件進行操作。(對「已經初始化」的理解是已經呼叫了建構函式,並且建構函式體可以未執行,只要呼叫到即可)

如 cicon a = b ;這是拷貝建構函式被設用

如cicon a ;a = b ; 這是賦值操作符被呼叫

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

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

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

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

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

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