我有一个这样的课程:
class Object {
...
}
和一个基本上由std::vector<Object>
:
class ObjectContainer {
public:
void addObject(Object ?? object);
...
private:
std::vector<Object> vector;
}
现在,在我初始化了一个Object
实例后,我想将实例添加到容器中,忘记了类似的内容:
Container container;
{
Object object(args...);
// Maybe more object initialization
container.addObject( object );
}
现在 - 如果可能的话,我希望容器,即std::vector<Object>
“获取”当前对象实例而不进行任何复制 - 这可能吗? Container::addObject
的实施是否应该如此简单:
void Container::addObject( Object && object) {
vector.push_back( object );
}
答案 0 :(得分:3)
这不会那么简单,你还需要一件事:
void Container::addObject( Object && object) {
vector.push_back(std::move(object));
}
在addObject函数中,对象本身实际上是一个左值,你必须将它强制转换为右值。
答案 1 :(得分:1)
不是准备对象然后将其移动到容器中作为最后一步,为什么不在容器内创建对象以开始并继续乱搞它?
以下是如何使用std::vector
直接执行此操作:
std::vector<Object> vector;
vector.emplace_back(args...);
Object& object = vector.back();
然后你可以使用已经是向量的一部分的object
进行进一步的初始化。