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.