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)
?
处理这类问题的优雅方式是什么?
大于内置类型的对象通常通过引用然后按值传递更便宜.因此,如果你的物体大约3兆,你需要传递它,请不要复制它!
所有STL类型都使用值语义:它们复制其内容.请注意,内容可能存在指针.在这种情况下,指针被复制,而不是它们所指的.
通过引用传递图像列表可能是个好主意.节省了大量的智能指针复制,因此它节省了大量的引用计数管理,并且可以节省大量的锁定/解锁.