C ++ insertion unique_ptr dans la carte

J’ai un object C ++ de type ObjectArray

 typedef map<int64_t, std::unique_ptr> ObjectArray; 

Quelle est la syntaxe pour créer un unique_ptr à un nouvel object de type Class1 et l’insérer dans un object de type ObjectArray ?

En premier lieu, je ne l’appellerais pas ObjectArray s’il s’agit d’une carte et non d’un tableau.

De toute façon, vous pouvez insérer des objects de cette façon:

 ObjectArray myMap; myMap.insert(std::make_pair(0, std::unique_ptr(new Class1()))); 

Ou de cette façon:

 ObjectArray myMap; myMap[0] = std::unique_ptr(new Class1()); 

La différence entre les deux formes est que la première échouera si la clé 0 est déjà présente dans la carte, tandis que la seconde écrasera sa valeur avec la nouvelle.

Dans C ++ 14, vous souhaiterez peut-être utiliser std::make_unique() au lieu de construire l’ unique_ptr partir d’une new expression. Par exemple:

 myMap[0] = std::make_unique(); 

Si vous souhaitez append un pointeur existant à insérer dans la carte, vous devrez utiliser std :: move.

Par exemple:

 std::unique_ptr classPtr(new Class1); myMap.insert(std::make_pair(0,std::move(classPtr)));