淺拷貝:僅僅將須要copy的內存空間的首地址賦值一份,粘貼到另外一個指針的內容上,兩者在內存上指向的是同一塊內存空間c++
深拷貝:從新開闢空間,將另外一個空間的內容賦值的這個空間上,二者的指針是指向不一樣的內存空間。
ide
在C++中,假設咱們定義了一個name的類,用它構造了兩個對象obj1 和 obj2函數
若咱們執行 name obj1 = obj2 且沒有本身建立一個copy構造函數時,c++編譯器會總動調用默認的copy構造函數,此時是淺拷貝,當執行析購函數時會出現錯誤;指針
如下三個語句:對象
Name obj1("abcdefg");blog
Name obj2(obj1);內存
Name obj3 = obj1;get
分別從建立了兩個對象 obj1 和 obj2,而且將他們賦值,他們的賦值操做是屬於淺拷貝,讓它們的對象中的指針元素指向了同一塊內存空間,即淺拷貝,在執行析構函數時第一次obj2的析購就會釋放掉其指針指向的兩個類所共有的空間,再次執行析購函數時候就會出現非法訪問。編譯器
解決方法:it
本身編寫copy構造函數;