我的代码如下插入并push_back指向唯一指针向量的指针会给出不同的编译行为?
vector<unique_ptr<int>> v;
v.insert(v.end(), new int(1)); // this is okay
v.push_back(new int(1)); // this is wrong, cannot convert int* to unique_ptr<int>&&
为什么汇编(VC2010)显示的差异?谢谢。
我的代码如下插入并push_back指向唯一指针向量的指针会给出不同的编译行为?
vector<unique_ptr<int>> v;
v.insert(v.end(), new int(1)); // this is okay
v.push_back(new int(1)); // this is wrong, cannot convert int* to unique_ptr<int>&&
为什么汇编(VC2010)显示的差异?谢谢。
这是因为在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作品在这两种情况下。
对于您提供的三个选项哪一个更快?或者他们是一样的?谢谢。 – user1899020
看看emplace_back:http://en.cppreference.com/w/cpp/container/vector/emplace_back – billz
然后emplace_back应该是禁食吧? – user1899020
甚至插入失败与[GCC](http://liveworkspace.org/code/1NQj0D$4)和[铛](http://liveworkspace.org/code/1NQj0D$4) –