scoped_array

Header : "boost/scoped_array.hpp"

對于使用動態(tài)分配的數(shù)祖來說vector經(jīng)常是我們最好的選擇.但是有倆個情況使用普通數(shù)組更為妥善.

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

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

動態(tài)數(shù)組暴露出和普通指針一樣的危險,伴隨著調(diào)用delete操作符來代替delete[]操作符的錯誤,

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

scoped_array用于數(shù)組類似scoped_ptr作用于單個對象的指針,它delete內(nèi)存,不同之處是scoped_array

使用操作符delete[].

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

的指針和數(shù)組指針是不可能的.

不管如何努力的去區(qū)別,沒有人發(fā)現(xiàn)一個可靠的方法來實現(xiàn),因為數(shù)組類型太容易退化到指針類型并不帶有

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

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

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

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

scoped_array優(yōu)于原始,動態(tài)分配數(shù)組之一.它管理動態(tài)數(shù)組的生命期,與scoped_ptr如何管理所指向?qū)ο?/FONT>

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

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