capypad
0 Tage Serie
rust / intermediate
Snippet

Implementierung des Drop Traits für RAII Bereinigung

Das Drop Trait ermöglicht Resource Acquisition Is Initialization (RAII) Muster in Rust. Wenn ein Wert den Gültigkeitsbereich verlässt, wird drop() automatisch aufgerufen, was die Freigabe von Ressourcen wie Dateien, Netzwerkverbindungen oder Speicher ermöglicht. Dies ist Rusts Hauptmechanismus für deterministische Bereinigung.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
struct FileWrapper {
filename: String,
}
 
impl Drop for FileWrapper {
fn drop(&mut self) {
println!("Cleaning up file: {}", self.filename);
}
}
 
struct DatabaseConnection {
conn: FileWrapper,
connected: bool,
}
 
impl Drop for DatabaseConnection {
fn drop(&mut self) {
if self.connected {
println!("Closing database connection for: {}", self.conn.filename);
}
}
}
 
fn main() {
let db = DatabaseConnection {
conn: FileWrapper { filename: String::from("data.db") },
connected: true,
};
println!("Database in use...");
}
Erklärung
1
impl Drop for FileWrapper
Implementiert Drop für automatische Bereinigungsbenachrichtigung
2
fn drop(&mut self)
Wird automatisch aufgerufen wenn FileWrapper den Scope verlässt
3
struct DatabaseConnection
Zusammengesetzte Struktur die FileWrapper enthält
4
impl Drop for DatabaseConnection
Drops werden in umgekehrter Deklarationsreihenfolge aufgerufen
5
if self.connected { ... }
Bedingte Bereinigung basierend auf Verbindungsstatus