No C ++ tradicional, a passagem de valor para funções e métodos é lenta para objetos grandes e geralmente é desaprovada. Em vez disso, os programadores de C ++ tendem a passar referências, o que é mais rápido, mas apresenta todos os tipos de perguntas complicadas sobre propriedade e principalmente sobre gerenciamento de memória (no caso de o objeto ser alocado por heap)
Agora, no C ++ 11, temos referências Rvalue e movemos construtores, o que significa que é possível implementar um objeto grande (como um std::vector
) que é barato para passar valor por uma função.
Então, isso significa que o padrão deve ser passar valor para instâncias de tipos como std::vector
e std::string
? E os objetos personalizados? Qual é a nova melhor prática?
const std::string&
e não uma cópia. O primeiro thread então saiu ...
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)
. Não entendo como é complicado ou problemático para a propriedade? Pode ser que eu perdi alguma coisa?