capypad
0 Tage Serie
rust / beginner
Snippet

Ownership und Move-Semantik verstehen

Rust verwendet Ownership, um Speicher zu verwalten. Wenn du s1 an s2 zuweist, geht das Ownership der Heap-Daten vom String von s1 auf s2 über. Nach dem Move ist s1 nicht mehr gültig. Verwende .clone(), wenn du eine unabhängige Kopie der Daten benötigst.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
fn main() {
let s1 = String::from("hello");
let s2 = s1; // s1 is moved to s2
// println!("{}", s1); // This would error!
println!("{}", s2); // This works fine
let s3 = String::from("world");
let s4 = s3.clone(); // Deep copy, both valid
println!("s3: {}, s4: {}", s3, s4);
}
Erklärung
1
let s1 = String::from("hello");
Erstellt einen String, der auf dem Heap zugewiesen ist
2
let s2 = s1;
Ownership geht auf s2 über; s1 ist jetzt ungültig
3
s1 würde fehler
Verwenden von s1 nach dem Move löst Kompilierfehler aus
4
.clone()
Erstellt eine tiefe Kopie; sowohl s3 als auch s4 sind gültig