Avatar ·

Fehler "cannot move out of borrowed content" in Rust: Ursachen und Behebung

Hallo! Ich habe angefangen, Rust zu lernen und bin auf einen Fehler gestoßen, den ich nicht verstehe. Code:\n\n```rust\nfn main() {\n let s = String::from("hello");\n let r = &s;\n let s2 = *r; // Fehler: cannot move out of borrowed content\n println!("{}", s2);\n}\n```\n\nIch dachte, dass `*r` die Referenz dereferenziert und mir Ownership über den String `s` gibt. Aber der Compiler sagt: "cannot move out of `*r` which is behind a shared reference". Warum ist das so? Ich will doch nur den Wert kopieren.\n\nDasselbe passiert mit Vektoren:\n\n```rust\nfn get_first(v: &Vec) -> i32 {\n v[0] // Fehler: cannot move out of borrowed content\n}\n```\n\nIch verstehe, dass Rust streng auf Ownership achtet, aber ich verstehe nicht, warum man nicht einfach den Wert über eine Referenz "nehmen" kann. In anderen Sprachen (C++, Python) funktioniert das. Wie bekomme ich es richtig hin?