17.深浅拷贝和写时拷贝
生活随笔
收集整理的這篇文章主要介紹了
17.深浅拷贝和写时拷贝
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
深淺拷貝
淺拷貝只拷貝指針,但拷貝后兩個指針指向同一個內存空間;
深拷貝不但對指針進行拷貝,而且對指針指向的內容進行拷貝,經深拷貝后的指針指向兩個不同地址。
當類成員不包括指針何引用時,淺拷貝并無問題;但對于指針與引用成員,當對象的生命周期結束后,淺拷貝會造成同一塊內存單元被釋放兩次,導致內存泄漏。??????
調用拷貝構造函數后,淺拷貝依然還有聯系,深拷貝的兩個對象完全獨立。
淺拷貝類似于文件創建快捷方式,而深拷貝好比文件復制。
編譯器默認提供的默認拷貝構造函數是淺拷貝,深拷貝的構造函數需自己實現。
什么是寫時拷貝技術:
寫時拷貝技術可以理解為“寫的時候才去分配空間”,這實際上是一種拖延戰術。
舉個栗子:
?
寫時拷貝技術原理:
寫時拷貝技術是通過"引用計數"實現的,在分配空間的時候多分配4個字節,用來記錄有多少個指針指向塊空間,當有新的指針指向這塊空間時,引用計數加一,當要釋放這塊空間時,引用計數減一(假裝釋放),直到引用計數減為0時才真的釋放掉這塊空間。當有的指針要改變這塊空間的值時,再為這個指針分配自己的空間(注意這時引用計數的變化,舊的空間的引用計數減一,新分配的空間引用計數加一)。
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的17.深浅拷贝和写时拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 16.C++中的this指针
- 下一篇: 18.用宏定义实现 得到两个数的最值