2.6. 共享数组

共享数组的行为类似于共享指针。 关键不同在于共享数组在析构时,默认使用 delete[] 操作符来释放所含的对象。 因为这个操作符只能用于数组对象,共享数组必须通过动态分配的数组的地址来初始化。

共享数组对应的类型是 boost::shared_array,它的定义在 boost/shared_array.hpp 里。

  1. #include <boost/shared_array.hpp>
  2. #include <iostream>
  3.  
  4. int main()
  5. {
  6. boost::shared_array<int> i1(new int[2]);
  7. boost::shared_array<int> i2(i1);
  8. i1[0] = 1;
  9. std::cout << i2[0] << std::endl;
  10. }

就像共享指针那样,所含对象的所有权可以跟其他共享数组来共享。 这个例子中定义了2个变量 i1i2,它们引用到同一个动态分配的数组。i1 通过 operator 操作符保存了一个整数1——这个整数可以被 i2 引用,比如打印到标准输出。

和本章中所有的智能指针一样,boost::shared_array 也同样提供了 get()reset() 方法。 另外还重载了 operator bool()