GitHub

设计模式

在析构器中做最终处理

Description

Rust中,通常在析构函数中运行退出前必须运行的代码。

Example

#[derive(Debug)]
struct A(u8);
impl Drop for A {
fn drop(&mut self) {
println!("A exit");
}
}
struct B(u8);
impl Drop for B {
fn drop(&mut self) {
println!("B exit");
}
}
fn main() {
let a: A = A(1);
{
let b: B = B(1);
println!("a: {:?}", a);
println!("b: {:?}", b);
}
panic!("error"); // 之后A的drop函数有执行
}

注意

需要注意的是,析构函数中的drop不能写panic!,否则panic!往后的操作可能没有执行,需要释放的资源没有释放掉。

上一篇
把集合当成智能指针