Zum Inhalt springen

Drop

struct Example(i32);
impl Drop for Example {
fn drop(&mut self) {
self.0 += 1;
println!("drop {}", self.0);
}
}
fn main() {
let e = Example(0);
drop(e);
drop(e);
}

Ein Wert, dessen Eigentümer Sie sind, kann nicht zweimal freigegeben werden. Daher führt der zweite Aufruf von drop zu einem Compilerfehler.


Betrachten Sie diesen Code-Schnipsel, der einen String allokiert:

fn main() {
let mut s = String::new();
____
}

Welche der folgenden Operationen sind gültig, um die Unterstreichung zu ersetzen, und würden dazu führen, dass s freigegeben wird?

Jede Verwendung von s, die den Wert verschiebt (moves) und das Ergebnis verwirft, führt dazu, dass s freigegeben wird. Die Methode s.drop() kann jedoch nicht direkt aufgerufen werden.