2017-10-20 3 views
1

Wenn ich eine std::vector von std::unique_ptr und Größe ändern, und Element nach Index hinzufügen wollte, was ist der beste Weg, sie mit operator= hinzuzufügen?Verwenden von Zuweisungsoperator mit Vektor von 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

Denken Sie, es gibt viele Möglichkeiten zur Auswahl? –

+0

Die meisten Tutorial sprechen über die Verwendung von unique_ptr und Möglichkeiten zu vermeiden, nur um sicherzustellen, dass es keinen Nachteil mit dem Operator =. – devcodexyz

+1

Vorsicht mit den vorhergehenden Unterstrichen. Sie sind oft für die Verwendung durch die Bibliothek reserviert. Handliches Lesen: [Welche Regeln gelten für die Verwendung eines Unterstrichs in einer C++ - ID?] (Https://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in- ac-identifier) ​​ – user4581301

Antwort

1

Sie std::make_unique verwenden können, wenn Sie C++ 14 verwenden, wie die

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

Andernfalls, wenn Sie unter C++ 14 sind, können Sie Ihre eigene Implementierung von std::make_unique, oder verwenden Sie den Konstruktor std::unique_ptr

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

std::unique_ptr keine Zuweisungsoperator, die einen rohen Zeiger nimmt.

Aber es hat einen Zuweisungsoperator, die von einem anderen std::unique_ptr bewegt, die Sie std::make_unique() mit erstellen:

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

Beachten Sie, dass 'std :: make_unique()' in C++ 14 hinzugefügt wurde. Für C++ 11 können Sie '_v [20] = std :: unique_ptr (neues Element);' stattdessen verwenden. –

Verwandte Themen