Einführung
In diesem Lab untersuchen wir die Verwendung des Drop-Traits in Rust, der automatisch aufgerufen wird, wenn ein Objekt außer Gültigkeitsbereich gelangt, und der dazu verwendet wird, die Ressourcen freizugeben, die das Objekt besitzt.
Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie
main.rsverwenden und es mitrustc main.rs &&./mainkompilieren und ausführen.
Drop
Das Drop-Trait hat nur eine Methode: drop, die automatisch aufgerufen wird, wenn ein Objekt außer Gültigkeitsbereich gelangt. Die Hauptanwendung des Drop-Traits besteht darin, die Ressourcen freizugeben, die die Implementierungsinstanz besitzt.
Box, Vec, String, File und Process sind einige Beispiele für Typen, die das Drop-Trait implementieren, um Ressourcen freizugeben. Das Drop-Trait kann auch für beliebige benutzerdefinierte Datentypen manuell implementiert werden.
Im folgenden Beispiel wird der drop-Funktion eine Ausgabe in die Konsole hinzugefügt, um anzuzeigen, wann sie aufgerufen wird.
struct Droppable {
name: &'static str,
}
// Diese triviale Implementierung von `drop` fügt eine Ausgabe in die Konsole hinzu.
impl Drop for Droppable {
fn drop(&mut self) {
println!("> Dropping {}", self.name);
}
}
fn main() {
let _a = Droppable { name: "a" };
// Block A
{
let _b = Droppable { name: "b" };
// Block B
{
let _c = Droppable { name: "c" };
let _d = Droppable { name: "d" };
println!("Exiting block B");
}
println!("Just exited block B");
println!("Exiting block A");
}
println!("Just exited block A");
// Variable kann manuell mit der `drop`-Funktion verworfen werden
drop(_a);
// TODO ^ Versuchen Sie, diese Zeile auszukommentieren
println!("end of the main function");
// `_a` wird hier *nicht* erneut `drop`ed, da es bereits (manuell) `drop`ed wurde
}
Zusammenfassung
Herzlichen Glückwunsch! Sie haben das Drop-Lab abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.