2013-01-12 24 views

回答

3

这是因为在VS2010,v.insert(v.end(), new int(1));优化调用std::vector::emplace_back其构造对象在地方,而性病::矢量::的push_back会尝试复制/转换int*std::unique_ptr<int>那么它失败了。为了推动智能指针到STL容器,你可以指定确切类型:

v.insert(v.end(), unique_ptr<int>(new int(1))); 
v.push_back(unique_ptr<int>(new int(1))); 

或直接致电

v.emplace_back(new int(1)); 

我测试你对VS2010和VS2012的代码,howerver VS2012不允许v.insert(v.end(), new int(1));,但emplace_back作品在这两种情况下。

+0

对于您提供的三个选项哪一个更快?或者他们是一样的?谢谢。 – user1899020

+0

看看emplace_back:http://en.cppreference.com/w/cpp/container/vector/emplace_back – billz

+0

然后emplace_back应该是禁食吧? – user1899020

相关问题