繁体   English   中英

shared_ptr到shared_ptr的向量

[英]shared_ptr to vector of shared_ptr

我有以下课程

struct Images {
    std::vector< std::shared_ptr<byte[]> > ptr_vector;
}

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

struct Images {  
  std::shared_ptr< std::vector<std::shared_ptr<byte[]>> > vector_ptr;
}

除了复制矢量并增加多个shared_ptr参考计数外,此处仅执行一次。

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

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

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

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

struct Images {
    std::vector< std::shared_ptr<byte[]> > ptr_vector;
};

std::shared_ptr<Images> images1, images2;

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

您的建议是:

  1. 复制ptr_vector ; 您将获得一个可以独立于原始向量进行更改的新向量。

  2. ptr_vector包装在另一个共享指针中并复制它; 您将获得原始向量的别名。

如果要创建别名,请选择选项2。如果要创建副本,请选择选项1。

找出您想要的,然后执行-快速执行错误的操作效率不高。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM