Foa*_*aly 4 c++ vector stdvector unique-ptr c++11
我有一个关于如何std::unique_ptr插入a的问题std::vector.想象一下,我有一个生成对象的函数,如下所示:
std::unique_ptr<CObject> createObjects()
{
return std::unique_ptr<CObject> (new CObject());
}
Run Code Online (Sandbox Code Playgroud)
现在在我的代码中,我有一个std::vector<std::unique_ptr<CObjects>> vec和我插入的元素如下:
vec.push_back(createObjects());
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:unique_ptr移动到矢量中还是复制了?
jua*_*nza 13
A 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
Run Code Online (Sandbox Code Playgroud)