相关疑难解决方法(0)

使用std :: make_unique的push_back或emplace_back

基于在回答这些 问题 在这里,我知道这肯定是最好使用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_backemplace_back何时添加std::unique_ptr构造的std::make_unique

====编辑====

为什么?c:< - (微笑)

c++ stdvector unique-ptr c++11 c++14

17
推荐指数
1
解决办法
6435
查看次数

将原始指针放在并推入智能指针矢量时,它们是否会自动转换为智能指针?

我偶然发现了这样的代码:

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是创建唯一指针的首选方法。

c++ pointers vector

3
推荐指数
1
解决办法
97
查看次数

标签 统计

c++ ×2

c++11 ×1

c++14 ×1

pointers ×1

stdvector ×1

unique-ptr ×1

vector ×1