对向量 unique_ptr 使用赋值运算符

Using assignment operator with vector of unique_ptr

如果我有一个 std::unique_ptrstd::vector 并调整它的大小,并想按索引添加元素,使用 operator= 添加它们的最佳方法是什么?

std::vector<std::unique_ptr<item>> _v;
_v.resize(100);
// is it safe to use the assignment operator? 
_v[20] = new item;

std::unique_ptr 没有采用原始指针的赋值运算符。

但它确实有一个从另一个 std::unique_ptr 移动的赋值运算符,您可以使用 std::make_unique():

创建它
_v[20] = std::make_unique<item>();

如果你使用 C++14,你可以使用 std::make_unique,就像那样

_v[20] = std::make_unique<item>(/* Args */);

否则如果你在C++14下,你可以自己实现std::make_unique,或者使用std::unique_ptr

的构造函数
_v[20] = std::unique_ptr<item>(new item(/* Args */));