[rust]Drop trait

41 阅读1分钟

定义

类似于其他语言中的析构函数,当值离开作用域时执行此函数

#[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.