W tradycyjnym C ++ przekazywanie wartości do funkcji i metod jest powolne w przypadku dużych obiektów i generalnie jest źle widziane. Zamiast tego programiści C ++ mają tendencję do przekazywania referencji, co jest szybsze, ale wprowadza różnego rodzaju skomplikowane pytania dotyczące własności, a zwłaszcza zarządzania pamięcią (w przypadku, gdy obiekt jest alokowany na stosie)
Teraz w C ++ 11 mamy referencje Rvalue i konstruktory przenoszenia, co oznacza, że można zaimplementować duży obiekt (taki jak std::vector
), który jest tani do przekazywania wartości do i z funkcji.
Czy to oznacza, że wartością domyślną powinno być przekazywanie wartości dla wystąpień typów, takich jak std::vector
i std::string
? A co z obiektami niestandardowymi? Jaka jest nowa najlepsza praktyka?
const std::string&
kopię, a nie kopię. Wtedy pierwszy wątek wyszedł ...
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)
. Nie rozumiem, jak skomplikowane lub problematyczne jest posiadanie? Może coś mi umknęło?