本文主要是介绍[rust-012]关于RATT(Resource Acquisition Is Initialization资源获取即初始化)的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考文档:https://doc.rust-lang.org/rust-by-example/scope/raii.html
Rust的变量,在堆上持有数据,也就是持有对应的资源。所以当程序运行完一个scope之后,它里面的变量被释放,资源也就释放了。由此解决了资源泄漏问题。
fn create_box() {// 在堆上分类一个证书Allocate an integer on the heaplet _box1 = Box::new(3i32);//函数执行完毕,`_box1`析构,内存释放。
}fn main() {// 在堆上分配_box2let _box2 = Box::new(5i32);//内嵌scope:{// 在堆上分配_box3let _box3 = Box::new(4i32);//内嵌scope运行结束,_box3析构,内存释放}//main函数运行结束,`_box2`析构,内存释放
}
如果有特别的资源要手工释放,可以实现Drop特质。对象析构的时候,会自动调用Drop特质。注意,不需要专门实现Drop。
struct ToDrop;impl Drop for ToDrop {fn drop(&mut self) {println!("ToDrop is being dropped");}
}fn main() {let x = ToDrop;println!("Made a ToDrop!");
}
//结果输出:
//Made a ToDrop!
//ToDrop is being dropped
这篇关于[rust-012]关于RATT(Resource Acquisition Is Initialization资源获取即初始化)的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!