Rust中Drop
起因
Rust中是怎么释放资源呢?是通过Drop trait 进行释放资源的? drop 有点类似c++的析构函数.Drop trait声明
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)]注解,才能让println!打印结构体内容
#[derive(Debug)]
struct People {
id: u32,
//id
name: &'static str,
//姓名 字符串
sex: &'static str, //性别
}
/// 给People实现Drop
/// 在离开变量所在作用域的时候,调用
impl Drop for People{
fn drop(&mut self){
println!("id={},name={} leave",self.id,self.name);
}
}
fn main() {
//let val = mylib::sum(10,30);
//println!("val={}",val);
let a = People{name:"tom",id:1,sex:"男"};
{
let b = People{name:"jim",id:2,sex:"男"}; //变量b在离开作用域的时候,调用drop
}
println!("Hello, world!");
}
变量b在离开所在作用域的时候,自动释放;
变量a也是在离开作用域的时候自动释放,只不过变量a的作用域是在main执行完时,进行释放的.
手动资源释放
use std::mem::drop; //drop所在包
fn main() {
//let val = mylib::sum(10,30);
//println!("val={}",val);
let a = People{name:"tom",id:1,sex:"男"};
drop(a); //调用之后,a释放在b之前
{
let b = People{name:"jim",id:2,sex:"男"}; //变量b在离开作用域的时候,调用drop
}
println!("Hello, world!");
}
通过手动drop实现了变量a的资源释放.并且在变量b所在的作用域之前释放资源.
很多类型实现Drop trait
秋风
2020-03-01