不是拷貝了基本型別的資料,而引用型別資料,複製後也是會發生引用,我們把這種拷貝叫做淺拷貝。換句話說,淺複製僅僅是指向被複製的記憶體位址,如果原位址中物件被改變了,那麼淺複製出來的物件也會相應改變。
int main()
在計算機中開闢了一塊新的記憶體位址用於存放複製的物件。
上述**中p1和p2指向的同一塊記憶體,釋放掉其中乙個指標所指向的記憶體,另乙個物件不知道自己指向的記憶體已經被釋放,再對這塊記憶體進行操作時就會崩掉。淺拷貝只是將指標的值拷貝過來,結果導致多個指標指向同一塊記憶體。
深拷貝是重新開闢一塊空間,將別人的內容拷貝過來。
當你讀取這個空間的時候,並不會開闢出乙個一模一樣的空間,當真正需要時,才會開闢空間,拖延般的深拷貝。通過引用計數實現的,再分配空間的時候多分配4個位元組,用來記錄由多少個指標指向這塊空間,當有新的指標指向這塊空間,引用計數加1,若有乙個指向該空間的指標要釋放空間,引用計數減1,直到引用計數減為0時才真正釋放這塊空間,當有指標要改變該空間的值,這才為該指標分配空間,同時注意舊空間和新空間的引用計數
C 淺拷貝 深拷貝 寫時拷貝
淺拷貝 編譯器只是直接將指標的值拷貝過來,結果多個物件共用了一塊記憶體,當乙個物件呼叫了析構函式將這塊記憶體釋放掉之後,另一些物件不知道這塊空間已經還給了系統,再次呼叫析構函式進行釋放時發現已經釋放了,就會造成程式崩潰。在類的成員中有指標型別的成員變數的時候,必須對其寫出顯式的拷貝建構函式和賦值運算...
淺拷貝,深拷貝,寫時拷貝
淺拷貝 拷貝構造時複製指標僅僅是對指標的值拷貝,而不開闢新的空間這樣就會造成在析構的時候。會對同一塊記憶體釋放兩次。深拷貝 拷貝構造時會開闢新的記憶體,並把記憶體中的值進行拷貝 寫時拷貝 就是當你在讀取一片空間時,系統並不會為你開闢乙個一模一樣的空間給你 只有在當你真正修改的時候,才會開闢一片空間給...
深拷貝 淺拷貝 寫時拷貝
在拷貝構造的時候,直接將原內容的位址交給要拷貝的類,兩個類共同指向一塊記憶體。缺陷 1 一旦對str2進行操作,str1的內容也會改變 2 析構時先析構str2,再析構str1,但是由於str1,str2指向同一塊記憶體空間,因此會導致對一塊記憶體進行兩次析構而出現錯誤 通過開闢和源空間大小相同的記...