2013-12-10 316 views
3

我有一个关于std::unique_ptr如何插入std::vector的问题。所以,想象我有一个产生的对象,像这样的功能:是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

'emplace_back'在这里更合适。 – user2485710

+1

你的意思是'std :: vector >'? – rodrigo

+0

对不起!这就是我的意思。我改变了它。 @ user2485710:'emplace_back'看起来非常有趣,但我不认为我可以在我的应用程序中使用它,因为我有一个模板创建对象,该对象从基类中冒充并返回基类的唯一指针。矢量存储这些。 – Foaly

回答

10

A unique_ptr不能被复制或复制分配。在push_back到vector中的情况下,它被移动,只要它是一个右值。为了测试这个,你可以尝试推一个左值。这将需要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 
相关问题