drop.md
commit 024aa9a345e92aa1926517c4d9b16bd83e74c10d
现在我们讨论了 trait,让我们看看一个由 Rust 标准库提供的特殊 trait,Drop
。Drop
trait提供了一个当一个值离开作用域后运行一些代码的方法。例如:
struct HasDrop;
impl Drop for HasDrop {
fn drop(&mut self) {
println!("Dropping!");
}
}
fn main() {
let x = HasDrop;
// do stuff
} // x goes out of scope here
当在main()
的末尾x
离开作用域的时候,Drop
的代码将会执行。Drop
有一个方法,他也叫做drop()
。它获取一个self
的可变引用。
就是这样!Drop
的机制非常简单,不过这有一些细节。例如,值会以与它们声明相反的顺序被丢弃(dropped)。这是另一个例子:
struct Firework {
strength: i32,
}
impl Drop for Firework {
fn drop(&mut self) {
println!("BOOM times {}!!!", self.strength);
}
}
fn main() {
let firecracker = Firework { strength: 1 };
let tnt = Firework { strength: 100 };
}
这会输出:
BOOM times 100!!!
BOOM times 1!!!