RALL和智能指針

RAII機制

RAII的本質內容是用對象代表資源,把管理資源的任務轉化爲管理對象的任務,將資源的獲取和釋放與對象的構造和析構對應起來,從而確保在對象的生存期內資源始終有效,對象銷燬時資源一定會被釋放。說白了,就是擁有了對象,就擁有了資源,對象在,資源則在。所以,RAII機制是進行資源管理的有力武器,C++程序員依靠RAII寫出的代碼不僅簡潔優雅,而且做到了異常安全。

特點

在棧語義和操作符重載的支持下,C++ RAII體現出了簡潔、安全、實時的特點:
1.概念簡潔性:讓資源(包括內存和非內存資源)和對象的生命週期綁定,資源類的設計者只需用在類定義內部處理資源問題,提高了程序的可維護性
2.類型安全性:通過資源代理對象包裝資源(指針變量),並利用運算符重載提供指針運算方便使用,但對外暴露類型安全的接口
3.異常安全性:棧語義保證對象析構函數的調用,提高了程序的健壯性
4.釋放實時性:和GC相比,RAII達到了和手動釋放資源一樣的實時性,因此可以承擔底層開發的重任

智能指針

除了靜態內存和棧內存,每個程序還擁有一個內存池。這部分內存稱爲自由空間或者。使用動態生存期的資源類:
1、程序不知道自己需要使用多少對象
2、程序不知道所需對象的準確類型
3、程序需要在多個對象間共享數據

shared_ptr

我們可以認爲每個shared_ptr都有一個關聯的計數器,通常稱其爲引用計數器。無論何時我們拷貝一個shared_ptr,計數器都會遞增。

unique_ptr

一個unique擁有它指向的對象,某個時刻只能有一個unique_ptr指向一個給定的對象。初始化unique_ptr必須使用直接初始化方式。

weak_ptr

是一種不控制所指向對象生存期的智能指針,它指向一個由shared_ptr管理的對象,將一個weak_ptr綁定一個shared_ptr,不改變計數。一旦最後一個shared_ptr被銷燬,對象就會被釋放。即使weak_ptr指向對象,對象依然會被銷燬。

發佈了87 篇原創文章 · 獲贊 72 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章