No, it is not freed immediately. Let's make the code tell us itself:
struct Foo(u8);
impl Drop for Foo {
fn drop(&mut self) {
println!("Dropping {}", self.0)
}
}
fn main() {
let a = Foo(1);
let b = Foo(2);
println!("All done!");
}
The output is:
All done!
Dropping 2
Dropping 1
For me, this has come in handy in cases where you transform the variable into some sort of reference, but don't care about the original. For example:
fn main() {
let msg = String::from(" hello world
");
let msg = msg.trim();
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…