向std::list添加元素或给数组元素赋值时是否应使用std::move()?
C++对象传递:拷贝还是移动?
场景1:向std::list添加对象
初始代码:
Object object; std::list<Object> objects;
你有两种操作选择:
objects.push_back(object); // 或者 objects.push_back(std::move(object));
- 如果之后还需要继续使用
object,选第一种,它会调用拷贝构造函数,将object的副本加入列表。 - 如果
object后续不再被使用,选第二种,通过std::move把object的资源直接转移到列表元素中,避免不必要的拷贝开销,提升效率。
场景2:数组元素赋值
初始代码:
Object object; Object objects[100];
可选操作如下:
objects[95] = std::move(object); // 或者直接 objects[95] = object;
- 若后续仍需使用
object,用普通赋值(第二种),触发拷贝赋值运算符完成操作。 - 若
object之后不再使用,用std::move(第一种)触发移动赋值,直接转移资源,减少拷贝成本。
内容的提问来源于stack exchange,提问作者Aidan
相关产品推荐
相关产品推荐

