提问人:Foaly 提问时间:12/11/2013 最后编辑:honkFoaly 更新时间:7/9/2018 访问量:7008
使用 push_back 时,std::unique_ptr 是否移动到 std::vector 中?
Is a std::unique_ptr moved into a std::vector when using push_back?
问:
我有一个关于如何将 a 插入到 .想象一下,我有一个函数,可以生成如下对象:std::unique_ptr
std::vector
std::unique_ptr<CObject> createObjects()
{
return std::unique_ptr<CObject> (new CObject());
}
现在在我的代码中,我有一个,我插入了这样的元素:std::vector<std::unique_ptr<CObjects>> vec
vec.push_back(createObjects());
现在我的问题是:是移动到向量中还是被复制?unique_ptr
答:
15赞
juanchopanza
12/11/2013
#1
A 不能是复制构造的,也不能是复制分配的。在 a 进入向量的情况下,它被移动,前提是它是一个 rvalue。要测试这一点,您可以尝试推一个左值。这将要求 是可复制或可分配的,因此会失败:unique_ptr
push_back
unique_ptr
std::unique_ptr<CObject> p(new CObject());
std::vector<std::unique_ptr<CObject>> vec;
vec.push_back(p); // error!
vec.push_back(std::unique_ptr<CObject>(new CObject())); // OK
vec.push_back(std::move(p)); // OK
评论
emplace_back
在这里更合适。std::vector<std::unique_ptr<CObject>>
emplace_back