Я думаю, что возвращение shared_ptr<vector<T>>
редко полезно.Я сделал бы это только в том случае, если бы несколько объектов содержали общий вектор, которым они могли бы манипулировать.Для меня это указывает на недостаток дизайна.Лучшей альтернативой, вероятно, является возврат по константной ссылке.Это позволяет избежать (потенциально дорогостоящей) операции копирования, но не позволяет средству доступа изменять вектор.
Если вы возвращаете локальный std::vector
, вы также можете вернуть его по аргументу.
Если вы действительно хотите вернуть shared_ptr<vector<T>>
, подумайте, будет ли работать shared_ptr<const vector<T>>
(вектор может быть проверен многими, но может быть изменен только владельцем).
Однако A обычно дороже, чем B, но здесь часто применяется оптимизация возвращаемого значения.Для C ++ 11 std::vector
имеет конструктор перемещения, который гарантирует, что для возврата локального std::vector
не потребуются дорогостоящие операции копирования.
Помните, не оптимизируйте преждевременно :)