3.3 scoped_array
scoped_array很像scoped_ptr,它包装了new[]操作符(不是单纯的new)在堆上分配的动态数组,为动态数组提供了一个代理,保证可以正确地释放内存。
scoped_array弥补了标准库中没有指向数组的智能指针的缺憾。
3.3.1 类摘要
scoped_array的类摘要如下:
- template<class T> class scoped_array //noncopyable
- {
- public:
- explicit scoped_array(T * p = 0);
- ~scoped_array();
-
- void reset(T * p = 0);
- T & operator[](std::ptrdiff_t i) const;
- T * get() const;
-
- operator unspecified-bool-type() const;
- void swap(scoped_array & b);
- };
scoped_array的接口和功能几乎是与scoped_ptr是相同的(甚至还要少一些),主要特点如下:
构造函数接受的指针p必须是new[]的结果,而不能是new表达式的结果;
没有*、->操作符重载,因为scoped_array持有的不是一个普通指针;
析构函数使用delete[]释放资源,而不是delete;
提供operator[]操作符重载,可以像普通数组一样用下标访问元素;
没有begin()、end()等类似容器的迭代器操作函数。