C++ 使_共享和部署功能

C++ 使_共享和部署功能,c++,c++11,shared-ptr,smart-pointers,C++,C++11,Shared Ptr,Smart Pointers,我试图找到一些在std::vector中放置元素的简单方法,但什么都没有std::shared_ptr将指针作为参数,因此我仍然可以编写以下代码: std::vector<std::shared_ptr<int>> vec; vec.emplace_back(new int(10)); 有没有什么方法可以同时利用emplace\u back和std::make\u shared?如果没有,在这种情况下我应该遵循什么准则 编辑:实际上,我问了这个问题,但有一个不相关的问题

我试图找到一些在
std::vector
中放置元素的简单方法,但什么都没有
std::shared_ptr
将指针作为参数,因此我仍然可以编写以下代码:

std::vector<std::shared_ptr<int>> vec;
vec.emplace_back(new int(10));
有没有什么方法可以同时利用
emplace\u back
std::make\u shared
?如果没有,在这种情况下我应该遵循什么准则


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

您可以让就地移动施工发生:

vec.emplace_back(std::make_shared<int>(42));
vec.emplace_-back(std::make_-shared(42));

他刚才不是说他做不到吗?@0x499602D2别担心,那只是我在第一次尝试时傻了,忘记了
make_shared
中的模板参数。事实上,我的问题是尽可能愚蠢的,每个人都应该忘记它。当我遇到另一个问题时,我无意中问了一个关于某个问题的问题。@Morwenn:这个解决方案确实是函数式的,但我怀疑它相当于一个推回,缺点是不够明确<代码>放置方法系列最初用于就地构建值,无需复制或移动(参见),从而避免创建临时值。当你真的想从一个临时文件中复制构造时(这里发生了什么),我认为
push
方法家族是做事情的标准方式。无论如何,编译器可以(或不可以)删除副本。
vec.emplace_back(std::make_shared<int>(42));