日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++智能指针(一)智能指针的简单介绍

發布時間:2023/11/30 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++智能指针(一)智能指针的简单介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://blog.csdn.net/nou_camp/article/details/70176949

C++智能指針?
在正式了解智能指針前先看一下下面的一段代碼

#include<iostream> using namespace std; class A { public:A():_ptr(NULL), _a(0){}~A(){} public:int* _ptr;int _a; };void test() {A a;int *p1 = new int(2); } int main() {test();system("pause");return 0; }
  • 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壓根沒釋放。在這里看起來內存泄漏沒有對結果造成什么,但是千萬不要小瞧內存泄漏,這是個很嚴重的問題。如果一個特別大的項目中存在很多很多的內存泄漏問題,一開始可能沒有什么問題,但是過一段時間服務器可能會掛掉,這就是內存泄漏導致內存不夠用產生的。?
為了解決這些問題,可以采用下面這種方法。

#include<iostream> using namespace std; void fun() {throw 2; } int main() {try{fun();}catch (int e){cout << e << endl;}system("pause");return 0; }
  • 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++智能指针(一)智能指针的简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。