Drop

欢马劈雪     最近更新时间:2020-08-04 05:37:59

87

drop.md
commit 024aa9a345e92aa1926517c4d9b16bd83e74c10d

现在我们讨论了 trait,让我们看看一个由 Rust 标准库提供的特殊 trait,DropDrop 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!!!
展开阅读全文