En C ++ tradicional, pasar por valor a funciones y métodos es lento para objetos grandes, y generalmente está mal visto. En cambio, los programadores de C ++ tienden a pasar referencias, lo que es más rápido, pero que introduce todo tipo de preguntas complicadas sobre la propiedad y especialmente sobre la administración de memoria (en el caso de que el objeto esté asignado en un montón)
Ahora, en C ++ 11, tenemos referencias de Rvalue y constructores de movimiento, lo que significa que es posible implementar un objeto grande (como un std::vector
) que es barato pasar por valor dentro y fuera de una función.
Entonces, ¿esto significa que el valor predeterminado debería ser pasar por valor para instancias de tipos como std::vector
y std::string
? ¿Qué pasa con los objetos personalizados? ¿Cuál es la nueva mejor práctica?
const std::string&
y no una copia. El primer hilo salió ...
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)
. No entiendo cómo es complicado o problemático para la propiedad. ¿Se me puede pasar algo por alto?