According to the Rust book, "when a binding goes out of scope, the resource that they’re bound to are freed". Does that also apply to shadowing?
Example:
fn foo() {
let v = vec![1, 2, 3];
// ... Some stuff
let v = vec![4, 5, 6]; // Is the above vector freed here?
// ... More stuff
} // Or here?
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 \n");
let msg = msg.trim();
}