基于在回答这些 问题 在这里,我知道这肯定是最好使用C++ 14的std::make_unique,而不是emplace_back(new X)直接.
那就是说,打电话是首选
my_vector.push_back(std::make_unique<Foo>("constructor", "args"));
Run Code Online (Sandbox Code Playgroud)
要么
my_vector.emplace_back(std::make_unique<Foo>("constructor", "args"));
Run Code Online (Sandbox Code Playgroud)
也就是说,我应该使用push_back或emplace_back何时添加std::unique_ptr构造的std::make_unique?
====编辑====
为什么?c:< - (微笑)
我偶然发现了这样的代码:
std::vector<std::unique_ptr<Fruit>> fruits;
fruits.emplace_back(new Fruit);
Run Code Online (Sandbox Code Playgroud)
(从这里)
因此,在代码中,我们将一个原始指针(new产生一个原始指针,对吗?)推入唯一指针的向量中。和代码的作品!但为什么?
因为这不能编译:
std::unique_ptr<Fruit> f = new Fruit();
Run Code Online (Sandbox Code Playgroud)
为了方便起见,这是不是有点不可思议?
此外,这种方法而不是显式的可能存在的陷阱是fruits.emplace_back(std::make_unique<Fruit>())什么?我读过这make_unique是创建唯一指针的首选方法。