定义
类似于其他语言中的析构函数,当值离开作用域时执行此函数
#[lang = "drop"]
#[stable(feature = "rust1", since = "1.0.0")]
// FIXME(effects) #[const_trait]
pub trait Drop {
fn drop(&mut self);
}
实现
struct Resource {
name: String,
}
impl Drop for Resource {
fn drop(&mut self) {
println!("Resource `{}` is being dropped!", self.name);
}
}
fn main() {
let res1 = Resource { name: String::from("Resource 1") };
let res2 = Resource { name: String::from("Resource 2") };
println!("Resources created.");
} // res1 和 res2 在这里出作用域并被销毁
// 打印如下:
// Resources created.
// Resource `Resource 2` is being dropped!
// Resource `Resource 1` is being dropped!
提前释放
尽管 drop
方法是自动调用的,但有时需要提前清理对象。在这种情况下,可以使用 std::mem::drop
函数来手动销毁对象
fn main() {
let res = Resource { name: String::from("Resource 1") };
// 手动提前销毁 `res`
drop(res);
println!("Resource created.");
}
// 打印如下:
// Resource `Resource 1` is being dropped!
// Resource created.