2017-10-20 172 views
1

矢量如果我有std::unique_ptrstd::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; 
+0

你認爲有很多方法可供選擇嗎? – 2017-10-20 18:47:41

+0

大多數教程都討論瞭如何使用unique_ptr的方法以及如何避免僅僅確保=運算符沒有缺點。 – devcodexyz

+1

請注意前面的下劃線。它們通常被保留供圖書館實施使用。 方便閱讀:[在C++標識符中使用下劃線的規則是什麼?](https://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in- ac-identifier) – user4581301

回答

1

你可以,如果你使用的是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 */)); 
1

std::unique_ptr沒有采用原始指針的賦值操作符。

但它確實有從其他std::unique_ptr,您可以創建一個使用std::make_unique()移動的賦值操作符:

_v[20] = std::make_unique<item>(); 
+2

請注意'std :: make_unique()'是在C++ 14中添加的。對於C++ 11,可以使用'_v [20] = std :: unique_ptr (新項目);'代替。 –