Por que é desencorajado a aceitar uma referência a uma String (& String), Vec (& Vec) ou Box (& Box) como argumento de função?

Eu escrevi algum código Rust que leva a &Stringcomo argumento: fn awesome_greeting(name: &String) { println!("Wow, you are awesome, {}!", name); } Também escrevi código que leva em uma referência a um Vecou Box: fn total_price(prices: &Vec<i32>) -> i32 {...