我有如下代码
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)显示差异?谢谢。
我有如下代码
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
哪个构造对象,而 std::vector::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 上测试了你的代码,但是 VS2012 不允许v.insert(v.end(), new int(1));
,但是 emplace_back 在这两种情况下都有效。