В традиционном C ++ передача по значению в функции и методы является медленной для больших объектов и обычно не одобряется. Вместо этого программисты на C ++ стремятся передавать ссылки, что быстрее, но при этом возникает множество сложных вопросов, касающихся владения и особенно управления памятью (в случае, если объект выделен в куче).
Теперь, в C ++ 11, у нас есть ссылки на Rvalue и конструкторы перемещения, что означает, что можно реализовать большой объект (такой как std::vector
), который дешево передавать по значению в функцию и из нее .
Итак, означает ли это, что по умолчанию должен передаваться по значению для экземпляров таких типов, как std::vector
и std::string
? Как насчет пользовательских объектов? Какова новая лучшая практика?
const std::string&
а не как копию. Затем вышел первый поток ...
pass by reference ... which introduces all sorts of complicated questions around ownership and especially around memory management (in the event that the object is heap-allocated)
, Я не понимаю, как это сложно или проблематично для владельца? Может быть, я что-то пропустил?