記憶體管理 智慧型指標之shared array

2021-06-05 03:53:55 字數 842 閱讀 6606

shared_array類似shared_ptr,它包裝了new操作符在堆上分配的動態陣列,同樣使用引用計數機制為動態陣列提供了乙個**,可以在程式的生命同期裡長期存在,直到沒有任何引用後才釋放記憶體。

類摘要:

templateclass shared_array;
shared_array與shared_ptr的區別如下:

1:建構函式接受的指標p必須是new的結果,而不能是new表示式。

2:提供operator操作符過載,可以像普通陣列一樣用下標訪問元素。

3:沒有*、->操作符過載,因為shared_array持有的不是乙個普通指標。

4:析構函式使用delete釋放資源,而不是delete。

使用示例:

#include #include using namespace boost;

using namespace std;

int main()

執行結果:

use count:2

no problem...

shared_array是shared_ptr和scoped_array的結合體,既具有shared_ptr的優點,也有scoped_array的缺點。

在使用shared_array過載的operator要注意,shared_array不提供陣列索引的範圍檢查,如果超過了動態陣列大小的索引或者是負數索引將引發未定義行為。

shared_array能力有限,大多情況下可以用shared_ptr或者std::vector代替。

這兩個方案具有更高的靈活性和更好的安全性,所付出的代價幾乎可以忽略不計。

記憶體的智慧型管理 智慧型指標

前言 我們在使用c和c 進行開發的時候,申請堆區記憶體是必不可少的,但是很多時候,我們經常忘記釋放他導致記憶體洩漏,從而導致程式崩潰,又或者在尚未使用完成的時候釋放,從而導致出現野指標,都是非常危險的現象,所以我們在c 11的標準中提出了智慧型指標的概念,他就是一種可以幫我們自動釋放記憶體的存在 共...

c 智慧型指標與記憶體管理

c 中當我們需要新分配記憶體的時候需要手動的去呼叫new顯式的分配一塊記憶體,如果我們在任何中new 如函式中申請空間返回 忘記釋放,或者在 函式執行過程中出現異常,沒 有執行釋放語句 了空間,在不需要使用後忘記了呼叫delete這塊位址的話就會造成 記憶體洩露。為了解決這乙個問題引入了智慧型指標。...

c 之智慧型指標(二)之直接管理記憶體

c 定義了兩個運算子來分配和釋放動態記憶體。new分配記憶體,delete釋放new分配的記憶體。相對於智慧型指標,使用這個兩個運算子非常容易出錯。因為它不能依賴類物件拷貝 賦值和銷毀操作的任何預設定義。預設情況下,動態分配的物件是預設初始化的。這意味著內建型別或組合型別的值將是未定義的。而類型別的...