C++深拷貝與淺拷貝區別


淺拷貝只是對指針的拷貝,拷貝后兩個指針指向同一個內存空間

深拷貝不僅對指針進行拷貝,而且對指針指向的內容進行拷貝,深拷貝后的指針是指向兩個不同地址的指針

 

當對一個已知對象進行拷貝時,編譯系統會自動調用一種構造函數——拷貝構造函數,如果用戶未定義拷貝構造函數,則會調用默認拷貝構造函數。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM