scoped_array
標頭檔: "boost/scoped_array.hpp"
需要動態分配數組時,通常最好用std::vector來實現,但是有兩種情形,看起來用數組更應該: 一種是為了最佳化,用vector多少有一些額外的記憶體和速度開銷;另一種是為了某種原因,必須要求數組的大小是固定的。[5] 動態分配的數組會遇到與普通指標一樣的危險,並且還多了一個(也是最常見的一個),錯誤調用delete操作符而不是delete[]操作符。我曾經在你想象不到的地方見到過這個錯誤,那也是它常被用到的地方,在你自己實現的容器類裡!scoped_array 為數組做了scoped_ptr為單個對象的指標所做的事情:它負責釋放記憶體。區別只在於scoped_array 是用delete[] 操作符來做這件事的。
[5] 沒有非常清晰的優點。實際上,最好還是用 std::vector ,除非效能測試表示scoped_array 的好處是可保證的。
scoped_array是一個單獨的類而不是scoped_ptr的一個特化的原因是,因為不可能用元編程技術來區分指向單個對象的指標和指向數組的指標。不管如何努力,也沒有人能發現一種可靠的方法,因為數組太容易退化為指標了,這使得沒有類型資訊可以表示它們是指向數組的。結果,只能由你來負責用scoped_array來代替scoped_ptr,就如你必須用delete[]操作符來代替delete操作符一樣。這樣的好處是scoped_array 負責為你處理刪除的事情,而你則告訴scoped_array 我們要處理的是數組,而不是裸指標。
scoped_array與scoped_ptr非常相似,不同的是它提供了operator[] 來模仿一個裸數組。
scoped_array 是比普通的動態分配數組更好用。它處理了動態分配數組的生存期管理問題,就如scoped_ptr管理對象指標的生存期一樣。但是記住,多數情況下應該使用std::vector,它更靈活、更強大。只有當你需要確保數組的大小是固定的時候,才使用scoped_array 來替代 std::vector.