Rust Grundlagen auf dem PC · Teil 12TutorialEinsteiger

Rust

Rust Grundlagen 12: Ownership

Besitz von Daten verstehen. Verständliche Rust-Lektion mit Beispielen, Übung und Musterlösung.

Kapitel: Rust verstehen

Veröffentlicht am

Teil 12: Ownership

Lernziel: Besitz von Daten verstehen.

Voraussetzungen: Die vorherigen Lektionen, insbesondere Teil 11.

Worum geht es?

Ownership ist ein Kernprinzip von Rust. Jeder Wert hat einen Besitzer. Verlässt dieser seinen Gültigkeitsbereich, kann sein Speicher automatisch freigegeben werden.

Schritt für Schritt

fn main() {
    let name1 = String::from("Neptune");
    let name2 = name1; // Besitz wird übertragen (Move)
    println!("{name2}");
    // println!("{name1}"); // absichtlich ungültig
}

Bei String verschiebt die Zuweisung hier den Besitz. Der alte Name darf anschließend nicht mehr verwendet werden. Das verhindert eine doppelte Freigabe derselben Ressource.

Bei einfachen Typen wie i32 wird dagegen häufig kopiert:

let a = 12;
let b = a;
println!("{a} {b}");

Möchtest du ausdrücklich unabhängige String-Daten, kannst du clone() verwenden – das erzeugt eine Kopie und kann Speicher und Zeit kosten.

Drei Merksätze

  1. Ein Wert besitzt jeweils einen Eigentümer.
  2. Eine Besitzübertragung macht die alte Bindung unbrauchbar.
  3. Am Ende der Gültigkeit wird eine besessene Ressource aufgeräumt.

Diese vereinfachten Regeln reichen für den Einstieg; Referenzen folgen im nächsten Teil.

Selbst ausprobieren

Erzeuge einen String, übertrage ihn auf eine zweite Variable und versuche anschließend, die erste Variable zu verwenden. Lies die Compilerfehlermeldung.

Musterlösung anzeigen
fn main() {
    let erster_name = String::from("X1C");
    let zweiter_name = erster_name;
    println!("{zweiter_name}");
    // println!("{erster_name}"); // error: value borrowed after move
}

Alternative für zwei unabhängige Strings: let zweiter_name = erster_name.clone();.

Das solltest du mitnehmen

  • Besitz von Daten verstehen.
  • Nutze cargo run für das Ausführen und cargo check für eine schnelle Fehlerprüfung (ab Teil 4).
  • Experimentiere mit veränderten Werten und beobachte die Compilermeldungen.

Weiterführende Quellen


← Vorheriger Teil | Kursübersicht | Nächster Teil →