shared_ptr to vector of shared_ptr

shared_ptr to vector of shared_ptr

本文关键字:shared ptr of to vector      更新时间:2023-10-16

我有以下类

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

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

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

此处只执行一个shared_ptr引用计数,而不是复制vector并递增多个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. Copy ptr_vector;你会得到一个新的矢量,它可以独立于原来的矢量而改变。

  2. ptr_vector包裹在另一个共享指针中并复制;你会得到一个原始矢量的别名

如果你的目的是创建一个别名,那么就选择选项2。如果你的目的是创建一个副本,请使用选项1。

弄清楚哪一个是你想要的,然后去做——快速地做错误的事情是没有效率的。