淺拷貝只是對指針的拷貝,淺拷貝后兩個指針指向同一個內存空間;
深拷貝不僅對指針進行拷貝,而且對指針指向的內容進行拷貝,經深拷貝后的指針是指向兩個不同地址的指針。
當對一個已知對象進行拷貝時,編譯系統會自動調用一種構造函數——拷貝構造函數,如果用戶未定義拷貝構造函數,則會調用默認拷貝構造函數。
當拷貝一個基類指針到派生類時,如果調用系統默認的拷貝構造函數,這時只是對指針進行拷貝,兩個指針指向同一個地址,這就會導致指針被分配了一次內存,但內存被釋放了兩次(兩次調用析構函數),造成程序崩潰。所以在對含有指針成員的對象進行拷貝時,必須要自己定義拷貝構造函數,使拷貝后的對象指針成員有自己的內存空間,即進行深拷貝,這樣就避免了內存泄漏發生。