对向量 unique_ptr 使用赋值运算符
Using assignment operator with vector of unique_ptr
如果我有一个 std::unique_ptr
的 std::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 */));
如果我有一个 std::unique_ptr
的 std::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 */));