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
做进一步的初始化工作,它已经是矢量的一部分。
我有一个 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
做进一步的初始化工作,它已经是矢量的一部分。