C 深淺拷貝遇到的問題

2021-10-22 14:10:35 字數 759 閱讀 9691

什麼時候使用深拷貝?

當class中有指標成員的時候,建構函式中使用new在堆區中開闢記憶體,就得在析構函式中使用delete釋放記憶體。使用深拷貝可以保證堆區開闢的資料不會被析構函式重複釋放多次而造成記憶體洩漏。

使用深拷貝需要注意什麼?

使用深拷貝時,如果指標不為null(建構函式已經將變數初始化),就應該先將指標置為空,再做深拷貝操作。

拷貝構造函式呼叫的時機是什麼?

使用乙個建立完畢的物件來初始化乙個新物件

person p2(p1);

值傳遞的方式給引數傳值

void test(person p1)

以值方式返回區域性物件

person test()

返回引用?還是返回值當我們要返回引用的時候,返回的是實際值,而實際在return之後就使用析構函式(如果有delete則會出現記憶體洩漏),比方說用operator=的時候會返回*this。

返回值的時候,系統先呼叫拷貝函式,再將拷貝後的值返回,而函式中本來的返回值在函式結束後被釋放。

鏈式程式設計思想

C 深淺拷貝問題詳解

相信很多人都自己去實現過string類的構造,拷貝構造,析構函式以及對字串的各種操作運算子的過載。但是在自己實現這些函式的時候,有的人可能會踩到這個深淺拷貝的雷,所以我在這篇部落格寫出我自己對這塊的理解 不要去執行,因為程式會奔潰,用除錯來監視s1和s2變數 class string string ...

C 深淺拷貝

當結構體中沒有指標時,可進行淺拷貝,資料也會從乙個結構體拷貝到另乙個結構體 兩個結構體都存乙份資料 但當結構體中有指標的時候,假如使用使用淺拷貝,會使兩個結構體使用的指標都指向同乙個記憶體位址,在析構的時候會造成記憶體洩漏。深拷貝 需要對含有指標的結構體,使用 new 申請新的記憶體空間去儲存拷貝的...

c 深淺拷貝

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