C++智能指针(一)智能指针的简单介绍
https://blog.csdn.net/nou_camp/article/details/70176949
C++智能指針?
在正式了解智能指針前先看一下下面的一段代碼
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
這個代碼僅從編譯運行是的角度是沒有問題的,但是細心看很明顯這段代碼是不負責任的,因為它存在內存泄漏。只是釋放了_ptr,但是p1壓根沒釋放。在這里看起來內存泄漏沒有對結果造成什么,但是千萬不要小瞧內存泄漏,這是個很嚴重的問題。如果一個特別大的項目中存在很多很多的內存泄漏問題,一開始可能沒有什么問題,但是過一段時間服務器可能會掛掉,這就是內存泄漏導致內存不夠用產生的。?
為了解決這些問題,可以采用下面這種方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
異常對象在傳給對應的catch處理后撤銷。這樣做是可以的,但是如果代碼中有比較多的異常,這樣顯然不合適,大量的try catch會影響代碼邏輯,導致代碼丑陋不堪。為了解決這個問題,引入了智能指針。?
說到智能指針,必須知道RAII?
RAII:資源分配即初始化,定義一個類來封裝資源的分配和釋放,在構造函數完成資源的分配和初始化,在析構函數完成資源的清理,可以保證資源的正確初始化和釋放。智能指針只是RAII的一種應用。?
智能指針:所謂智能指針就是智能/自動化的管理指針所指向的動態資源的釋放。?
智能指針的發展可分為三個部分,?
1.auto_ptr 管理權的轉移–帶有缺陷的設計–c++98/03?
2.scoped_ptr(boost) unique_ptr(c++11) 防拷貝 –簡單粗暴的設計 –功能不全?
3.shared_ptr(boost/c++11) 引用計數 –功能強大(支持拷貝,支持定制刪除器) 缺陷–循環引用(可采用weak_ptr配合解決)
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的C++智能指针(一)智能指针的简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oppo手机乐播投屏教程
- 下一篇: C++智能指针(二)模拟实现三种智能指针