Is the resource of a shadowed variable binding freed immediately?

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();

Leave a Comment