使用push_back时std :: unique_ptr是否已移入std :: vector?

时间:2013-12-10 17:29:31

标签: c++ c++11 vector stdvector unique-ptr

我对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是移入向量还是被复制?

1 个答案:

答案 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