我有一个关于如何将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
将向量移入向量还是将其复制?
甲unique_ptr
不能拷贝构造或复制分配。在将apush_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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句