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