是否立即释放隐藏变量绑定的资源



根据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?

不,它不会立即释放。让我们让代码自己告诉我们:

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!");
}

输出为:

All done!
Dropping 2
Dropping 1

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

fn main() {
    let msg = String::from("   hello world   n");
    let msg = msg.trim();
}

最新更新