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

c矢量与严格的所有权语义,第1张

概述这不是关于将std :: auto_ptr放入std :: vector的问题. 在std ::,std :: tr1 ::或boost ::?中是否有一些等效的std :: auto_ptr?我在函数参数中使用std :: auto_ptr,并将值返回到这些函数的decalre所有权语义.但是这样我只能传递单个对象.作为向量的临时解决方案,我有这样的: std::auto_ptr<std::ve 这不是关于将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();
总结

以上是内存溢出为你收集整理的c矢量与严格的所有权语义全部内容,希望文章能够帮你解决c矢量与严格的所有权语义所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1214060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存