capypad
0 Tage Serie
rust / beginner
Snippet

Ownership verstehen: Move-Semantik

Wenn du s2 = s1 für Heap-Typen wie String zuweist, wird der Besitz (Move) auf s2 übertragen. s1 wird ungültig. Dies verhindert Double-Free-Bugs und erzwingt.single Ownership. Primitive wie i32 werden Kopiert statt Bewegt.

snippet.rs
rust
1
2
3
4
5
6
fn main() {
let s1 = String::from("hello");
let s2 = s1;
// println!("{}", s1); // Error: s1 was moved
println!("{}", s2);
}
Erklärung
1
let s1 = String::from("hello")
Erstellt einen String, der auf dem Heap mit dem Wert "hello" alloziert wird.
2
let s2 = s1
Der Besitz der Heap-Daten wird auf s2 übertragen. s1 ist nicht mehr zugänglich.
3
println!("{}", s2)
Dies funktioniert, weil s2 nun den Besitz der Daten hat.