智能指针 scoped_array

scoped_array:
 scoped_array的接口和功能几乎是与scoped_ptr是相同的(甚至还有少),主要特点如下:
 【1】构造函数接受的指针p必须是new[]的结果,而不能使new表达式的结果;
 【2】没有*,->操作符重载,因为scoped_array持有的不是一个普通指针;
 【3】析构函数使用delete[]释放资源,而不是delete;
 【4】提供operator[]操作符重载,可以像普通数组一样用下标访问元素;
 【5】没有begin() ,end()等类似容器的迭代器操作函数.
用法:
 scoped_array与scoped_ptr源于相同的设计思想:它们只能在被声明的作用域内使用,不能拷贝,赋值。

 注意:
 【1】scoped_array重载了operator[],因此它用起来就像一个普通的数组,但因为它不提供指针运算,所以不能用"数组首地址+N"的方式访问数组元素.
 【2】scoped_array不提供数组索引的范围检查,如果使用了超过动态数组大小的索引或者负数将引发未定义行为.

使用建议:
 scoped_array的功能很有限,不能动态增长,也没有迭代器支持,不能搭配STL算法,仅有一个纯粹的"裸"数组接口,而且,应当尽量避免使用new[]操作符,它比new更可怕。
 除非对性能有非常苛刻的要求,或者编译器不支持标准库(比如某些嵌入式操作系统),否则本书不推荐使用scoped_array,它只是为了与老式c风格代码兼容而使用的类,它的出现往往意味着你的代码中存在着隐患。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章