0

我有以下课程

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 引用计数,这里只执行一个。

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

4

2 回答 2

3

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

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

如果你想共享数据,你也可以考虑拥有std::shared_ptr<Images>

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

std::shared_ptr<Images> images1, images2;

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

于 2013-05-02T22:41:35.850 回答
2

你的建议是:

  1. 复制ptr_vector;你会得到一个新的向量,可以独立于原始向量进行更改。

  2. 包装ptr_vector另一个共享指针并复制它;你得到原始向量的别名。

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

弄清楚其中哪一个是你想要的,然后去做——很快做错事是没有效率的。

于 2013-05-02T22:45:24.653 回答