C ++进入容器

时间:2015-07-30 22:15:36

标签: c++ move-semantics

我有一个这样的课程:

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 );
}

2 个答案:

答案 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进行进一步的初始化。