scoped_array

Header : "boost/scoped_array.hpp"

對于使用動態分配的數祖來說vector經常是我們最好的選擇.但是有倆個情況使用普通數組更為妥善.

1:優化,vector帶來過大的開銷在體積和速度上.

2:表達的意圖,使用長度固定的數組

動態數組暴露出和普通指針一樣的危險,伴隨著調用delete操作符來代替delete[]操作符的錯誤,

我在很多地方看到過這個錯誤,只一個就不敢想象,何況應用的如此廣泛在容器類的所有權中!

scoped_array用于數組類似scoped_ptr作用于單個對象的指針,它delete內存,不同之處是scoped_array

使用操作符delete[].

scoped_array是一個單獨類而不是scoped_ptr的特化是因為使用metaprogramming技術來分別單個對象

的指針和數組指針是不可能的.

不管如何努力的去區別,沒有人發現一個可靠的方法來實現,因為數組類型太容易退化到指針類型并不帶有

任何類型轉化信息來說明它到底指像的是什么類型.結果你有責任采用scoped_array而不是scoped_ptr,

就像你必須使用delete[] operator而不是delete operator.優勢是scoped_array幫你處理delete,

并且提醒你它處理的是數組,原生指針卻做不到此點.

scoped_array和scoped_ptr和相似,不同的是它提供operator[]來模仿原生數組.

scoped_array優于原始,動態分配數組之一.它管理動態數組的生命期,與scoped_ptr如何管理所指向對象

的生命期類似,雖然如此,但很多情況下,std::vector卻更可取,因為它更靈活,更強大.

當你需要固定長度的數組,使用scoped_array而不是std::vector.