TR1共享阵列

时间:2009-03-09 19:22:25

标签: c++ boost tr1

我很难在TR1文档中找到有关共享数组的参考资料。 Boost文档非常明确,C ++“new”和“new []”表达式之间存在显着差异。 shared_ptr模板用于正确保存指向使用“new”创建的动态分配的对象的指针。 shared_array模板用于使用“new []”正确保存指向动态分配的数组的指针。

我正在更新一些代码以使用TR1 shared_ptr模板和相关函数,但我没有发现shared_array。 TR1 shared_ptr实现是否区分“new”和“new []”,并正确销毁这些指针?据我所知,从TR1规格看,它似乎没有。如果是这种情况,我是否仍应使用boost shared_array模板进行“new []”样式分配?

2 个答案:

答案 0 :(得分:23)

这是正确的,TR1中没有shared_array。

但是,如果您希望使用此构造函数,则可以提供自己的删除对象来执行“delete []”:

template<class Other, class D>
   shared_ptr(Other* ptr, D dtor);

例如:

template<typename T>
struct my_array_deleter
{
   void operator()(T* p)
   {
      delete [] p;
   }
};

shared_ptr<int> sp(new int[100], my_array_deleter<int>());

答案 1 :(得分:1)

我怀疑大多数使用TR1的人不使用数组,而是使用vector&lt;&gt;代替。

我还没有读过TR1,所以我会在Boost的基础上回答,这可能已经足够了。升压:: shared_ptr的&LT;&GT;处理单个对象,而不是数组。这就是boost :: shared_array&lt;&gt;是为了。

如果您正在使用数组,并且有理由转换为shared_array&lt;&gt;但不是向量&lt;&gt;,而是使用shared_array&lt;&gt;。