我对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
是移入向量还是被复制?
答案 0 :(得分:13)
unique_ptr
无法复制构建或复制分配。如果向量push_back
,则会移动它,前提是它是 rvalue 。要对此进行测试,您可以尝试按左值。这将要求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