本文主要是介绍[rust-013] 关于ownership所有权和move移动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考文档https://doc.rust-lang.org/rust-by-example/scope/move.html
变量可以持有资源。
有些变量不持有资源。比如reference,也就是&T。
每个资源,有且只有一个owner。这样以确保owner释放资源的时候是安全的,避免多次释放资源。多次释放同一个资源会导致异常。
move:当执行let x=y或者以传值的方式进行函数调用foo(x)的时候,变量的ownership会进行转移。move后,原先的变量不再使用,以避免悬空指针。
// This function takes ownership of the heap allocated memory
fn destroy_box(c: Box<i32>) {println!("Destroying a box that contains {}", c);// `c` is destroyed and the memory freed
}fn main() {//栈上分配的整数let x = 5u32;//copy x到y, 没有资源movelet y = x;// x和y都可以独立使用println!("x is {}, and y is {}", x, y);// a是在堆上分配的整数,注意,是堆上let a = Box::new(5i32);println!("a contains: {}", a);// 这是一个move,把a的资源move给b。a和b都是
这篇关于[rust-013] 关于ownership所有权和move移动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!