shared_ptr到shared_ptr的向量

时间:2013-05-02 22:36:41

标签: c++ smart-pointers

我有以下课程

struct Images {
    std::vector< std::shared_ptr<byte[]> > ptr_vector;
}
复制ptr_vector时,

不会让std::shared_ptr更有效率Images? 即做Images A; Images B = A;

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

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

这种方法有任何问题/限制吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

std::shared_ptr<Images> images1, images2;

这样可以避免复制大型数据集。

答案 1 :(得分:2)

您的建议是:

  1. 复制ptr_vector;你得到一个新的矢量,可以独立于原来的变化。

  2. ptr_vector换行到另一个共享指针并复制它;你得到原始载体的别名。

  3. 如果您的目的是创建一个别名,那么请使用选项2.如果您打算创建一个副本,请选择选项1.

    弄清楚哪些是你想要的并做到这一点 - 快速做错事并不高效。