Move em Chamadas de Função
Quando você passa um valor para uma função, o valor é atribuído ao parâmetro da função. Isso transfere a ownership:
fn say_hello(name: String) { println!("Olá {name}") } fn main() { let name = String::from("Alice"); say_hello(name); // say_hello(name); }
- Com a primeira chamada para
diga_ola
,main
desiste da ownership denome
. Depois disso,nome
não pode mais ser usado dentro demain
. - A memória do heap alocada para
name
será liberada no final da funçãosay_hello
. main
pode manter a ownership se passarnome
como uma referência (&name
) e sesay_hello
aceitar uma referência como um parâmetro.- Alternativamente,
main
pode passar um clone denome
na primeira chamada (name.clone()
). - Rust torna mais difícil a criação de cópias inadvertidamente do que o C++, tornando padrão a semântica de movimento e forçando os programadores a tornar os clones explícitos.