直接上圖吧:
1.對象置空了,為啥list獲取對象不報錯
為啥不報錯.png
2.
為啥值都改了.png
3.
為啥不一樣.png
4.
3.png
5.
原理圖.jpg
淺拷貝
對一個已知對象進行拷貝,編譯系統(tǒng)會自動調(diào)用一種構(gòu)造函數(shù)——拷貝構(gòu)造函數(shù),如果用戶未定義拷貝構(gòu)造函數(shù)剖煌,則會調(diào)用默認拷貝構(gòu)造函數(shù),調(diào)用一次構(gòu)造函數(shù),調(diào)用兩次析構(gòu)函數(shù)挠将,兩個對象的指針成員所指內(nèi)存相同,但是程序結(jié)束時該內(nèi)存卻被釋放了兩次编整,會造成內(nèi)存泄漏問題舔稀。
深拷貝
在對含有指針成員的對象進行拷貝時,必須要自己定義拷貝構(gòu)造函數(shù)掌测,使拷貝后的對象指針成員有自己的內(nèi)存空間内贮,即進行深拷貝,這樣就避免了內(nèi)存泄漏發(fā)生,調(diào)用一次構(gòu)造函數(shù)夜郁,一次自定義拷貝構(gòu)造函數(shù)什燕,兩次析構(gòu)函數(shù)。兩個對象的指針成員所指內(nèi)存不同拂酣。
總結(jié):淺拷貝只是對指針的拷貝秋冰,拷貝后兩個指針指向同一個內(nèi)存空間,深拷貝不但對指針進行拷貝婶熬,而且對指針指向的內(nèi)容進行拷貝剑勾,經(jīng)深拷貝后的指針是指向兩個不同地址的指針。
原文鏈接:https://blog.csdn.net/chen134225/article/details/82977035