Is the resource of a shadowed variable binding freed immediately?

99封情书 提交于 2020-05-09 06:49:28

问题


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?

回答1:


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


来源:https://stackoverflow.com/questions/30304145/is-the-resource-of-a-shadowed-variable-binding-freed-immediately

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!