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 diga_ola(nome: String) { println!("Olá {nome}") } fn main() { let nome = String::from("Alice"); diga_ola(nome); // diga_ola(nome); }
- Com a primeira chamada para
diga_ola,maindesiste da ownership denome. Depois disso,nomenão pode mais ser usado dentro demain. - A memória do heap alocada para
nomeserá liberada no final da funçãodiga_ola. mainpode manter a ownership se passarnomecomo uma referência (&nome) e sediga_olaaceitar uma referência como um parâmetro.- Alternativamente,
mainpode passar um clone denomena primeira chamada (nome.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.