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.