矢量如果我有std::unique_ptr
的std::vector
和調整其大小,並希望通過指數來添加元素,什麼是使用operator=
增加他們的最好方法是什麼?使用賦值運算符的的unique_ptr
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::vector
和調整其大小,並希望通過指數來添加元素,什麼是使用operator=
增加他們的最好方法是什麼?使用賦值運算符的的unique_ptr
std::vector<std::unique_ptr<item>> _v;
_v.resize(100);
// is it safe to use the assignment operator?
_v[20] = new item;
你可以,如果你使用的是C++ 14,像
_v[20] = std::make_unique<item>(/* Args */);
使用
std::make_unique
否則,如果你在C++ 14下,你可以自己實現std::make_unique
,或者使用構造函數std::unique_ptr
_v[20] = std::unique_ptr<item>(new item(/* Args */));
std::unique_ptr
沒有采用原始指針的賦值操作符。
但它確實有從其他std::unique_ptr
,您可以創建一個使用std::make_unique()
移動的賦值操作符:
_v[20] = std::make_unique<item>();
請注意'std :: make_unique()'是在C++ 14中添加的。對於C++ 11,可以使用'_v [20] = std :: unique_ptr
你認爲有很多方法可供選擇嗎? – 2017-10-20 18:47:41
大多數教程都討論瞭如何使用unique_ptr的方法以及如何避免僅僅確保=運算符沒有缺點。 – devcodexyz
請注意前面的下劃線。它們通常被保留供圖書館實施使用。 方便閱讀:[在C++標識符中使用下劃線的規則是什麼?](https://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in- ac-identifier) – user4581301