智慧型指標 scoped array

2021-06-10 07:48:36 字數 716 閱讀 5204

scoped_array:

scoped_array的介面和功能幾乎是與scoped_ptr是相同的(甚至還有少),主要特點如下:

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

沒有*,->操作符過載,因為scoped_array持有的不是乙個普通指標;

析構函式使用delete釋放資源,而不是delete;

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

沒有begin() ,end()等類似容器的迭代器操作函式.

用法:scoped_array與scoped_ptr源於相同的設計思想:它們只能在被宣告的作用域內使用,不能拷貝,賦值。

注意:scoped_array過載了operator,因此它用起來就像乙個普通的陣列,但因為它不提供指標運算,所以不能用"陣列首位址+n"的方式訪問陣列元素.

scoped_array不提供陣列索引的範圍檢查,如果使用了超過動態陣列大小的索引或者負數將引發未定義行為.

使用建議:

scoped_array的功能很有限,不能動態增長,也沒有迭代器支援,不能搭配stl演算法,僅有乙個純粹的"裸"陣列介面,而且,應當盡量避免使用new操作符,它比new更可怕。

除非對效能有非常苛刻的要求,或者編譯器不支援標準庫(比如某些嵌入式作業系統),否則本書不推薦使用scoped_array,它只是為了與老式c風格**相容而使用的類,它的出現往往意味著你的**中存在著隱患。

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

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

智慧型指標學習

最近接觸到智慧型指標很多,於是研究了一下智慧型指標的原理,寫下自己的心得體會,有不對的還請指正。智慧型指標產生的目的 因為在c 中,存在非常複雜的指標錯誤問題,例如,某個物件生成後,指向該物件的指標可能有多個,當我們用delete語句刪除其中的乙個指標後,物件就被銷毀,那麼其餘指向該物件的指標就會懸...

智慧型指標3

include include using namespace std define test smartptr class stub class sentry sentry private int lock template class refcountingtraits void unrefer...