make_shared和emplace函数

时间:2013-05-21 23:27:02

标签: c++ c++11 shared-ptr smart-pointers

我试图找到一些简单的方法来放置std::vector<std::shared_ptr<int>>中的元素,但却无法提供任何内容。 std::shared_ptr将指针作为参数,所以我仍然可以这样写:

std::vector<std::shared_ptr<int>> vec;
vec.emplace_back(new int(10));

但是,如果可能的话,我不想手动使用new,如果可能的话,我宁愿使用std::make_shared。问题是,如果我真的想要使用它,我必须改为使用push_back而失去就地构造的优势:

std::vector<std::shared_ptr<int>> vec;
vec.push_back(std::make_shared<int>(10));

有没有办法获得emplace_backstd::make_shared的优势?如果没有,在这种情况下是否应该遵循指南?

编辑:实际上,我问了这个问题,但是有一个无关的问题。 Andy的答案很好,同时使用emplace函数和std::make_shared并没有任何实际问题。

1 个答案:

答案 0 :(得分:18)

您可以让就地移动构造发生:

vec.emplace_back(std::make_shared<int>(42));