首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shared_ptr的向量的shared_ptr

shared_ptr的向量的shared_ptr
EN

Stack Overflow用户
提问于 2013-05-03 06:36:41
回答 2查看 457关注 0票数 0

我有下面的课程

代码语言:javascript
复制
struct Images {
    std::vector< std::shared_ptr<byte[]> > ptr_vector;
}

ptr_vector放在std::shared_ptr中是不是在复制Images时更有效率?即做Images A; Images B = A;

代码语言:javascript
复制
struct Images {  
  std::shared_ptr< std::vector<std::shared_ptr<byte[]>> > vector_ptr;
}

这里只执行一次,而不是复制向量并递增多个shared_ptr引用计数。

这种方法有什么问题/限制吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-03 06:41:36

是的,如果您必须仅复制指针,则复制效率更高。

限制是使用任何指针,您可以共享公共数据。当您修改一个struct Images时,另一个也会被修改。

如果您想要共享数据,还可以考虑使用std::shared_ptr<Images>

代码语言:javascript
复制
struct Images {
    std::vector< std::shared_ptr<byte[]> > ptr_vector;
};

std::shared_ptr<Images> images1, images2;

这也将避免复制大型数据集。

票数 3
EN

Stack Overflow用户

发布于 2013-05-03 06:45:25

你的建议是:

  1. Copy ptr_vector;您将获得一个可以独立于原始矢量进行更改的新矢量。
  2. ptr_vector包装在另一个共享指针中并复制该指针;您将获得原始矢量的别名。

如果您的目的是创建别名,则使用选项2。如果您的目的是创建副本,请使用选项1。

找出其中哪一个是你想要的,然后去做--很快做错了事情是没有效率的。

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

https://stackoverflow.com/questions/16348870

复制
相关文章

相似问题

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