В традиционном С++ переход по значениям в функции и методы замедляется для больших объектов и, как правило, неодобрен. Вместо этого программисты на C++ склонны передавать ссылки, что происходит быстрее, но в них вводятся всевозможные сложные вопросы, связанные с владением, и особенно в области управления памятью (в том случае, если объект выделен в виде кучи)
Теперь, в С++ 11, мы имеем ссылки Rvalue и перемещаем конструкторы, а это означает, что можно реализовать большой объект (например, std::vector
), который дешево передавать по значению в и из функции.
Итак, означает ли это, что значение по умолчанию должно быть передано по значению для экземпляров типов, таких как std::vector
и std::string
? Как насчет пользовательских объектов? Какая новая лучшая практика?