C++在std :: list <>中存储大数据..我应该使用引用计数吗?

siv*_*udh 2 c++ reference-counting stdlist

人们通常如何管理复制大型物体列表?

这是我的情况:

目前我有这个:

typedef std::vector<float> Image;  
Run Code Online (Sandbox Code Playgroud)

我把它存放在一个

std::list<Image> lst;
Run Code Online (Sandbox Code Playgroud)

Image.size()非常大(每个大约3-5 MB).

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

我是否正确理解std :: vector将按值复制每个元素?如果是这样,由于过度复制,性能可能有点糟糕?

我该怎么做才能减少复制?我应该存储

std::list<ImageRef> lst;
Run Code Online (Sandbox Code Playgroud)

哪里

typedef boost::shared_ptr<Image>   ImageRef;
Run Code Online (Sandbox Code Playgroud)

处理这类问题的优雅方式是什么?

xto*_*ofl 5

大于内置类型的对象通常通过引用然后按值传递更便宜.因此,如果你的物体大约3兆,你需要传递它,请不要复制它!

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

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