深拷貝與淺拷貝

淺拷貝:僅僅將需要copy的內存空間的首地址賦值一份,粘貼到另一個指針的內容上,二者在內存上指向的是同一塊內存空間

深拷貝:重新開闢空間,將另一個空間的內容賦值的這個空間上,兩者的指針是指向不同的內存空間。

  在C++中,假設我們定義了一個name的類,用它構造了兩個對象obj1 和 obj2

若我們執行 name obj1 = obj2 且沒有自己創建一個copy構造函數時,c++編譯器會總動調用默認的copy構造函數,此時是淺拷貝,當執行析購函數時會出現錯誤;

以下三個語句:

Name obj1("abcdefg");

Name obj2(obj1);

Name obj3 = obj1;

分別從創建了兩個對象 obj1 和 obj2,並且將他們賦值,他們的賦值操作是屬於淺拷貝,讓它們的對象中的指針元素指向了同一塊內存空間,即淺拷貝,在執行析構函數時第一次obj2的析購就會釋放掉其指針指向的兩個類所共有的空間,再次執行析購函數時候就會出現非法訪問。

解決方法:

自己編寫copy構造函數;

wKioL1fjoZrT0oL_AACD5xum0rA915.png-wh_50


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章