人们通常如何管理周围的大型对象列表的复制?

这是我的情况:

目前我有这个:

typedef std::vector<float> Image;

我将其存储在
std::list<Image> lst;

Image.size()很大(每个〜3-5 MB)。

我正在传递(复制)列表。

就我而言,std::vector将按值复制每个元素是否正确?如果是这样,由于过度复制,性能可能会有些糟糕吗?

我该怎么做以减少复制?我是否应该存储
std::list<ImageRef> lst;

哪里
typedef boost::shared_ptr<Image>   ImageRef;



处理此类问题的优雅方法是什么?

最佳答案

比内置类型大的对象通过引用然后按值传递的方式通常更便宜。因此,如果您的物体大约3兆欧,并且需要传递,请不要复制它!

所有STL类型都使用值语义:它们复制其内容。注意,内容可能存在指针。在这种情况下,将复制指针,而不是它们所指的指针。

通过引用传递图像列表甚至是一个好主意。节省了大量的智能指针复制,因此节省了大量的引用计数管理,并且可以节省大量的锁定/解锁。

10-08 08:13