Is the resource of a shadowed variable binding fre

2020-04-30 03:33发布

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?

标签: rust
1条回答
▲ chillily
2楼-- · 2020-04-30 03:54

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();
}
查看更多
登录 后发表回答