Rost -Destruktor

Rost -Destruktor
Rost bietet einen Mechanismus, um die Aufräumarbeiten auf dem Haufen zu ermöglichen. Das Drop -Merkmal in Rost ermöglicht es Ihnen, einen „Destruktor“ zu betreiben, wenn ein Wert nicht mehr benötigt wird. Ein häufiger Fall ist, wenn ein Wert aus dem Zielfernrohr geht.

Der Rost -Destruktor besteht aus zwei Komponenten:

  1. Ein Anruf zum Drop :: Drop Wenn das Drop -Merkmal vom Werttyp implementiert wird.
  2. Ein automatisch generierter Tropfen, der den Destruktor auf dem Feld des Wertes rekursiv bezeichnet. Dies beseitigt die Notwendigkeit, dass Sie den Destruktor weiterhin aufrufen müssen.

Rosttypen wie Box, VEC, Zeichenfolge, Datei und Prozesse implementieren das Drop -Merkmal standardmäßig, um die Ressourcen zu befreien.

Implementierung von Rost -Drop -Merkmalen

Lassen Sie uns sehen, wie wir ein Merkmal für einen benutzerdefinierten Typ implementieren können.

Die Syntax für das Tropfenmerkmal ist wie gezeigt:

Merkmal fallen
fn Drop (& mut self);

Wie bereits erwähnt, senkt Rost automatisch einen Wert, wenn er aus dem Zielfernrohr geht. Dies geschieht in umgekehrter Reihenfolge der Schöpfung.

Nehmen Sie unten ein Beispiel, das ein Tropfenmerkmal für einen benutzerdefinierten Typ implementiert.

Verwenden Sie STD :: Thread;
Verwenden Sie STD :: TIME :: Dauer;
strukturuser
Benutzername: & 'statischer Str,

Impl Drop für Benutzer
fndrop (& mutself)
println!("Fallen lassen ", Selbst.Nutzername);


fnmain ()
// Zielfernrohr 1
sei _user1 = user userername: "userername1";

// Zielfernrohr 2
sei _user2 = user userername: "userername2";

// Zielfernrohr 3
sei _user3 = user userername: "userername3";
sei _user4 = user userername: "userername4";
println!("Ausgangsumfang 3");

println!("Ausgegebener Bereich 3");
println!("-------------------------------------------- ");
// Warten
Thread :: Sleep (Dauer :: von_Millis (1500));
println!("Ausgangsfernrohr 2");

println!("Ausgegebener Bereich 2");
println!("-------------------------------------------- ");
// Variable manuell fallen lassen
Thread :: Sleep (Dauer :: von_Millis (1500));
Drop (_User1);
println!("Hauptfunktion schließen!");
println!("-------------------------------------------- ");

Wenn wir den obigen Code ausführen, sollten wir eine Ausgabe wie unten gezeigt sehen:

Lassen Sie uns erklären, was der obige Code tut. Wir beginnen mit der Definition eines benutzerdefinierten Typs mit einer Struktur. Beachten Sie, dass wir das Feld Benutzername angeben, um eine statische Lebensdauer zu haben.

Als nächstes definieren wir ein Drop -Merkmal für den Benutzertyp. Dies ist ein einfaches Drop -Merkmal, das einfach in die Konsole druckt, wenn eine Variable abgesetzt wird, nachdem sie aus dem Zielfernrohr ausgegangen ist.

In der Hauptfunktion erstellen wir eine Instanz der Benutzerstruktur mit dem Namen "User1",.

Anschließend erstellen wir zwei neue Blöcke, die ihren eigenen Bereich enthalten und Variablen in jedem Bereich definieren.

Beachten Sie die Println -Nachricht, die beschreibt, wann wir aus dem Zielfernrohr gehen und wenn eine Variable fallen gelassen wird.

Wir implementieren auch eine Schlafdauer, um den Schalter zwischen Scopes zu veranschaulichen.

Schließlich lassen wir die Variable im Hauptbereich manuell mit der Drop -Funktion wie definiert im Drop -Merkmal fallen lassen.

Abschluss

Dieser kurze Artikel zeigt, wie das Drop -Merkmal für benutzerdefinierte Typen implementiert wird und wie Drop funktioniert, wenn eine Variable aus dem Umfang ausgeht.