Erro "cannot move out of borrowed content" em Rust: causas e correção
Olá! Comecei a estudar Rust e me deparei com um erro que não consigo entender. Código:
```rust
fn main() {
let s = String::from("hello");
let r = &s;
let s2 = *r; // Erro: cannot move out of borrowed content
println!("{}", s2);
}
```
Eu pensei que `*r` desreferencia a referência e me dá a propriedade da string `s`. Mas o compilador diz: "cannot move out of `*r` which is behind a shared reference". Por que isso? Afinal, eu só quero copiar o valor.
O mesmo acontece com vetores:
```rust
fn get_first(v: &Vec) -> i32 {
v[0] // Erro: cannot move out of borrowed content
}
```
Entendo que o Rust controla rigorosamente a propriedade, mas não entendo por que não posso simplesmente "pegar" o valor por referência. Em outras linguagens (C++, Python) isso funciona. Como obter corretamente o valor de uma referência? E por que essa restrição existe?
Explique, por favor, como corrigir esses exemplos e qual é a causa profunda do erro. Desde já, obrigado!
<<>>