У традиційному C ++ передача за значенням функцій та методів для великих об'єктів повільна і, як правило, нахмурена. Натомість програмісти на C ++, як правило, передають посилання навколо, що швидше, але це вводить усілякі складні питання щодо власності та особливо щодо управління пам'яттю (у випадку, якщо об’єкт виділено купою)
Тепер, у C ++ 11, у нас є посилання Rvalue та конструктори переміщення, що означає, що можливо реалізувати великий об'єкт (на зразок an 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)
. Я не розумію, наскільки це складно чи проблематично для власності? Може, я щось пропустив?