首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TR1共享阵列

TR1共享阵列
EN

Stack Overflow用户
提问于 2009-03-09 19:22:25
回答 2查看 6.9K关注 0票数 15

我很难在TR1文档中找到关于共享数组的参考资料。Boost文档非常清楚地说明了C++ "new“和"new[]”表达式之间的显著区别。shared_ptr模板旨在正确地持有指向使用"new“创建的动态分配对象的指针。使用"new[]“,shared_array模板可以正确地保存指向动态分配数组的指针。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-09 19:31:21

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

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

代码语言:javascript
复制
template<class Other, class D>
   shared_ptr(Other* ptr, D dtor);

例如:

代码语言:javascript
复制
template<typename T>
struct my_array_deleter
{
   void operator()(T* p)
   {
      delete [] p;
   }
};

shared_ptr<int> sp(new int[100], my_array_deleter<int>());
票数 23
EN

Stack Overflow用户

发布于 2009-03-09 19:32:22

我怀疑大多数使用TR1的人不使用数组,而是使用vector<>。

我还没有读过TR1,所以我会根据Boost来回答,这可能已经足够好了。boost::shared_ptr<>处理单个对象,而不是数组。这就是boost::shared_array<>的作用。

如果您正在使用数组,并且有理由转换为shared_array<>而不是vector<>,请使用shared_array<>。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/627641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档