scoped_array

Header : "boost/scoped_array.hpp"

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

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

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

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

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

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

使用操作符delete[].

scoped_array是一個(gè)單獨(dú)類而不是scoped_ptr的特化是因?yàn)槭褂胢etaprogramming技術(shù)來分別單個(gè)對(duì)象

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

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

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

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

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

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

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

的生命期類似,雖然如此,但很多情況下,std::vector卻更可取,因?yàn)樗?/FONT>靈活,更強(qiáng)大.

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