Подтвердить что ты не робот

С++ вставка unique_ptr в карту

У меня есть объект С++ типа ObjectArray

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

Каков синтаксис для создания unique_ptr для нового объекта типа Class1 и вставки его в объект типа ObjectArray?

4b9b3361

Ответ 1

Как первое замечание, я бы не назвал его ObjectArray, если это карта, а не массив.

В любом случае вы можете вставить объекты таким образом:

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

Или так:

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

Разница между двумя формами заключается в том, что первая будет терпеть неудачу, если ключ 0 уже присутствует на карте, а второй будет перезаписывать его значение новым.

В С++ 14 вы можете использовать std::make_unique() вместо построения unique_ptr из выражения new. Например:

myMap[0] = std::make_unique<Class1>();

Ответ 2

Если вы хотите добавить существующий указатель для вставки в карту, вам нужно будет использовать std:: move.

Например:

std::unique_ptr<Class1> classPtr(new Class1);

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