24

我试图找到一些简单的方法来在 a 中放置元素,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吗?如果没有,在这种情况下是否有我应该遵循的指导方针?

编辑:实际上,我问了这个问题,但有一个不相关的问题。emplaceAndy 的回答很好,同时使用这两个功能没有任何实际问题std::make_shared

4

1 回答 1

26

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

vec.emplace_back(std::make_shared<int>(42));
于 2013-05-21T23:31:41.773 回答