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,maindesiste da ownership denome. Depois disso,nomenão pode mais ser usado dentro demain. - A memória do heap alocada para
nameserá liberada no final da funçãosay_hello. mainpode manter a ownership se passarnomecomo uma referência (&name) e sesay_helloaceitar uma referência como um parâmetro.- Alternativamente,
mainpode passar um clone denomena 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.