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

2021-09-03 02:52:53 字數 1205 閱讀 2051

☆深拷貝函式主要是解決拷貝函式不能直接拷貝指標所指記憶體的資料的問題:

其次,介紹一下什麼是拷貝建構函式以及拷貝建構函式將在何時被呼叫?

拷貝建構函式是一種特殊的建構函式,其形參是本類物件的引用,其作用是使用乙個已經存在的物件來初始化

乙個新的同類的物件。

何時被呼叫?

① 當用類的物件去初始化另外乙個物件的時候;

② 當函式的形參為類物件時,呼叫該函式時,實參賦值給形參;

③ 當函式的返回值是類物件時。

1> 首先給出乙個demo原始碼

#include using namespace std;

class a

a(a &a)

~a()

int putcount()

};int main()

2>執行結果及分析:

為什麼程式到這會崩潰?

因為上述demo中在拷貝函式對指標的拷貝後,使得兩個例項化出的類的物件指向了同乙個記憶體位址,

然後在預設的析構函式呼叫的時候,同乙個記憶體位址被釋放了兩次,然後程式就崩潰了。

1>原始碼

#include using namespace std;

class a

a(a &a)

}~a()

int putcount()

};int main()

2>執行結果及分析

分析:

這裡在拷貝建構函式中首先例項化了指標的記憶體位址,然後再進行逐個複製,這就是深拷貝,完美的解決了淺拷貝的問題。

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

一.拷貝建構函式 先直接來看 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的複製過程。就...

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

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