RALL和智慧型指標

2021-08-08 01:21:24 字數 931 閱讀 6168

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

在棧語義和操作符過載的支援下,c++ raii體現出了簡潔、安全、實時的特點:

1.概念簡潔性:讓資源(包括記憶體和非記憶體資源)和物件的生命週期繫結,資源類的設計者只需用在類定義內部處理資源問題,提高了程式的可維護性

2.型別安全性:通過資源**物件包裝資源(指標變數),並利用運算子過載提供指標運算方便使用,但對外暴露型別安全的介面

3.異常安全性:棧語義保證物件析構函式的呼叫,提高了程式的健壯性

4.釋放實時性:和gc相比,raii達到了和手動釋放資源一樣的實時性,因此可以承擔底層開發的重任

除了靜態記憶體和棧記憶體,每個程式還擁有乙個記憶體池。這部分記憶體稱為自由空間或者。使用動態生存期的資源類:

1、程式不知道自己需要使用多少物件

2、程式不知道所需物件的準確型別

3、程式需要在多個物件間共享資料

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

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

是一種不控制所指向物件生存期的智慧型指標,它指向乙個由shared_ptr管理的物件,將乙個weak_ptr繫結乙個shared_ptr,不改變計數。一旦最後乙個shared_ptr被銷毀,物件就會被釋放。即使weak_ptr指向物件,物件依然會被銷毀。

智慧型指標和萬能指標

智慧型指標 智慧型指標 smart pointer 是儲存指向動態分配 堆 物件指標的類。除了能夠在適當的時間自動刪除指向的物件外,他們的工作機制很像c 的內建指標。智慧型指標在面對異常的時候格外有用,因為他們能夠確保正確的銷毀動態分配的物件。他們也可以用於跟蹤被多使用者共享的動態分配物件。智慧型指...

智慧型指標 強弱智慧型指標

在平時編寫 的時候經常會用到new來開闢空間,而我們開闢出來的空間必須得手動去delete他,但是如果程式設計師忘記去手動釋放那邊會出現乙個麻煩的問題,記憶體洩漏!或者是一塊記憶體被多個函式同時使用時,如果其中乙個函式不知道還有其他人也在使用這塊記憶體而釋放掉的話同樣也會引起程式的崩潰。引起記憶體洩...

stl智慧型指標和boost智慧型指標對比

先說說stl中的智慧型指標auto ptr,先說說auto ptr的特點。std auto ptr用來管理單個堆記憶體物件,但是獨享所有權,且不允許賦值和拷貝 沒有過載operator 所以如果在函式內部需要指標時,auto ptr是乙個不錯的選擇,但需要注意的是它不容許複製,這也就是容器 vect...