действительно ли здесь std::move(foo)
действительно необходимо?
Необходимо, нет, полезно, да.Без std::move
foo
это lvalue, поэтому оно приведет к копированию.Это может быть неэффективно.Поскольку вам больше не нужен foo
, имеет смысл переместить его в массив, а не копировать его.
что происходит с std::move
, если foo
создается какconst
, как const FooPtr& foo = ...
?
Тогда вы получите копию.Вы не можете переместить что-то, что является const
, так как перемещение изменяет состояние 1 перемещенного объекта.
1: Теоретически для перемещения может не потребоваться изменение состояния перемещенного объекта, но в любом случае вы просто делаете копию.