Mam C++ obiektu typu ObjectArray
C++ wstawienie unique_ptr na mapie
typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
Jaka jest składnia stworzyć unique_ptr
do nowego obiektu typu Class1
i włóż ją do obiektu typu ObjectArray
?
Mam C++ obiektu typu ObjectArray
C++ wstawienie unique_ptr na mapie
typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
Jaka jest składnia stworzyć unique_ptr
do nowego obiektu typu Class1
i włóż ją do obiektu typu ObjectArray
?
Jako pierwsza uwaga, nie nazwałbym tego ObjectArray
, jeśli jest to mapa, a nie tablica.
W każdym razie, można wstawiać obiekty w ten sposób:
ObjectArray myMap;
myMap.insert(std::make_pair(0, std::unique_ptr<Class1>(new Class1())));
Or w ten sposób:
ObjectArray myMap;
myMap[0] = std::unique_ptr<Class1>(new Class1());
Różnica między tymi dwoma postaciami jest to, że były nie powiedzie się, jeśli klawisz 0
jest już obecny na mapie, podczas gdy druga nadpisze jej wartość na nową.
W C++ 14 można użyć std::make_unique()
zamiast tworzyć unique_ptr
z wyrażenia new
. Na przykład:
myMap[0] = std::make_unique<Class1>();
+1 do kompletności i przejrzystość. – taocp
@milleniumbug: Dobra sugestia, pozwól mi dodać ją do odpowiedzi. Dziękujemy –
Inną opcją jest członek emplace: myMap.emplace (0, nowa klasa1). Jednak nie wszystkie biblioteki obsługują tego członka. –
Jeśli chcesz dodać istniejący wskaźnik do wstawienia na mapę, będziesz musiał użyć std :: ruch.
Na przykład:
std::unique_ptr<Class1> classPtr(new Class1);
myMap.insert(std::make_pair(0,std::move(classPtr)));
Poniższa strona MSDN ma jakieś informacje na ten temat: http://msdn.microsoft.com/en-us/library/vstudio/hh279676.aspx – yuyang