起因
Rust中是怎么释放资源呢?是通过Drop trait 进行释放资源的? drop 有点类似c++的析构函数.
Drop trait目前源码在core/ops/drop.rs下,
#[lang = "drop"]
#[stable(feature = "rust1", since = "1.0.0")]
pub trait Drop {
#[stable(feature = "rust1", since = "1.0.0")]
fn drop(&mut self);
}
Drop trait
#[derive(Debug)]
struct People {
id: u32,
name: &'static str,
sex: &'static str,
}
impl Drop for People{
fn drop(&mut self){
println!("id={},name={} leave",self.id,self.name);
}
}
fn main() {
let a = People{name:"tom",id:1,sex:"男"};
{
let b = People{name:"jim",id:2,sex:"男"};
}
println!("Hello, world!");
}
变量b在离开所在作用域的时候,自动释放;
变量a也是在离开作用域的时候自动释放,只不过变量a的作用域是在main执行完时,进行释放的.
手动资源释放
use std::mem::drop;
fn main() {
let a = People{name:"tom",id:1,sex:"男"};
drop(a);
{
let b = People{name:"jim",id:2,sex:"男"};
}
println!("Hello, world!");
}
通过手动drop实现了变量a的资源释放.并且在变量b所在的作用域之前释放资源.
很多类型实现Drop trait