C++ 移入容器

C++ move into container

我有一个 class 这样的:

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> 到 'take' 当前对象实例而不进行任何复制 - 这可能吗? Container::addObject 的实现是否会像这样简单:

void Container::addObject( Object && object) {
   vector.push_back( object );
}

不会那么简单,你还需要一件事:

void Container::addObject( Object && object) {
   vector.push_back(std::move(object));
}

在addObject函数中,对象本身实际上是一个左值,你必须将它转换回一个右值。

与其准备对象然后将其移入容器作为最后一步,为什么不首先在容器内创建对象并继续摆弄它呢?

以下是直接使用 std::vector 的方法:

std::vector<Object> vector;
vector.emplace_back(args...);
Object& object = vector.back();

然后你可以用 object 做进一步的初始化工作,它已经是矢量的一部分。