Иллюстрация, когда нужно предпочесть первый метод ко второму, - это когда вам нужно избегать переопределения предыдущих определений функции.
С помощью
if (condition){
function myfunction(){
// Some code
}
}
это определение myfunction
переопределит любое предыдущее определение, так как оно будет выполнено во время синтаксического анализа.
Хотя
if (condition){
var myfunction = function (){
// Some code
}
}
выполняет правильную работу по определению myfunction
только тогда, когда condition
выполнено.
Как первое замечание, я бы не назвал его 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
уже присутствует на карте, а второй будет перезаписывать его значение новым.
В C ++ 14 вы можете использовать std::make_unique()
вместо построения unique_ptr
из выражения new
. Например:
myMap[0] = std::make_unique<Class1>();
Если вы хотите добавить существующий указатель для вставки в карту, вам нужно будет использовать std :: move.
Например:
std::unique_ptr<Class1> classPtr(new Class1);
myMap.insert(std::make_pair(0,std::move(classPtr)));