首页 文章

阴影变量绑定的资源是否立即释放?

提问于
浏览
1

根据Rust的书,“当一个绑定超出范围时,它们被绑定的资源被释放” . 这也适用于阴影吗?

例:

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 回答

  • 6

    不,它不会立即释放 . 让我们做Rust 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 a = Foo(2);
    
        println!("All done!");
    }
    

    输出是:

    All done!
    Dropping 2
    Dropping 1
    

    对我来说,在将变量转换为某种引用但不关心原始变量的情况下,这已派上用场了 . 例如:

    fn main() {
        let a = Foo(1);
        let a = &a; 
    }
    

相关问题