我试图找到一些简单的方法来放置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_back
和std::make_shared
的优势?如果没有,在这种情况下是否应该遵循指南?
编辑:实际上,我问了这个问题,但是有一个无关的问题。 Andy的答案很好,同时使用emplace
函数和std::make_shared
并没有任何实际问题。
答案 0 :(得分:18)
您可以让就地移动构造发生:
vec.emplace_back(std::make_shared<int>(42));