加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c矢量与严格的所有权语义

发布时间:2020-12-16 09:36:43 所属栏目:百科 来源:网络整理
导读:这不是关于将std :: auto_ptr放入std :: vector的问题. 在std ::,std :: tr1 ::或boost ::?中是否有一些等效的std :: auto_ptr?我在函数参数中使用std :: auto_ptr,并将值返回到这些函数的decalre所有权语义.但是这样我只能传递单个对象.作为向量的临时解
这不是关于将std :: auto_ptr放入std :: vector的问题.

在std ::,std :: tr1 ::或boost ::?中是否有一些等效的std :: auto_ptr?我在函数参数中使用std :: auto_ptr,并将值返回到这些函数的decalre所有权语义.但是这样我只能传递单个对象.作为向量的临时解决方案,我有这样的:

std::auto_ptr<std::vector<std::tr1::shared_ptr<ClassExample> > > fx(....);

我想,通过引入提升,我将能够改为:

std::auto_ptr<std::vectro<boost::unique_ptr<ClassExample> > >f(...);

为了定义严格的所有权传递,但它似乎相当复杂.为了简化它,我可以使用

std::vector<boost::unique_ptr<ClassExample> > f(...);

因为向量的深层副本的价格不高,但我仍然很好奇,如果有一些我可以这样使用:

auto_vector<ClassExample> f(...);

意味着该函数释放所有对象的所有权,并且不会深深复制向量内部数据数组.

解决方法

没有任何特殊原因,为什么你需要维护一个指针向量,第一个解决方案是抛弃所有的复杂性,并为简单:

std::vector<Type> f();

对象的所有权是唯一的(向量拥有它们),而代码看起来像是在返回时复制向量,在大多数情况下它将是optimized away.

如果由于某些其他要求(对象必须通过工厂分配,它们是指向派生类型的指针,或者由于向量增长而无法移动 – 代码维护引用/指针),您需要动态分配向量内的对象你没有显示然后我会去一个boost :: ptr_vector,它将保持所包含对象的所有权.再次,按价值返回:

boost::ptr_vector<Type> f();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读