2.6. 共享数组
共享数组的行为类似于共享指针。 关键不同在于共享数组在析构时,默认使用 delete[]
操作符来释放所含的对象。 因为这个操作符只能用于数组对象,共享数组必须通过动态分配的数组的地址来初始化。
共享数组对应的类型是 boost::shared_array
,它的定义在 boost/shared_array.hpp
里。
- #include <boost/shared_array.hpp>
- #include <iostream>
- int main()
- {
- boost::shared_array<int> i1(new int[2]);
- boost::shared_array<int> i2(i1);
- i1[0] = 1;
- std::cout << i2[0] << std::endl;
- }
就像共享指针那样,所含对象的所有权可以跟其他共享数组来共享。 这个例子中定义了2个变量 i1 和 i2,它们引用到同一个动态分配的数组。i1 通过 operator
操作符保存了一个整数1——这个整数可以被 i2 引用,比如打印到标准输出。
和本章中所有的智能指针一样,boost::shared_array
也同样提供了 get()
和 reset()
方法。 另外还重载了 operator bool()
。