本文主要是介绍[rust-014]关于形如T的borrowing借用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考文献:https://doc.rust-lang.org/rust-by-example/scope/borrow.html
borrow,借用,借用不改变ownership,不会产生ownership的move。所以可以多次借用。
T是值,&T是reference引用。赋值使用引用,或者函数调用传参为引用,即形成“借用”。
借用,总是处于一个scope。只要这个scope没有运行结束,出借方就不会被释放,这是rust的规定。
// This function takes ownership of a box and destroys it
fn eat_box_i32(boxed_i32: Box<i32>) {println!("Destroying box that contains {}", boxed_i32);
}// This function borrows an i32
fn borrow_i32(borrowed_i32: &i32) {println!("This int is: {}", borrowed_i32);
}fn main() {//堆上的 boxed i32let boxed_i32 = Box::new(5_i32);//栈上的i32let stacked_i32 = 6_i32;//堆上和栈上,都可以被借用,借用不会导致move,不改变ownershipborrow_i32(&boxed_i32);borrow_i32(&stacked_i32);{//这是一个scope//_ref_to_i32,借用堆上的整数let _ref_to_i32: &i32 = &boxed_i32;//下面的语句会报错//如果没有_ref_to_i32的借用,eat_gox_i32函数会获得boxed_i32的ownership,函数运行结束后//会释放boxed_i32指向的内存。//堆上的整数,已经被借用了,在这个scope没有运行结束之前,不能释放boxed_i32
// eat_box_i32(boxed_i32);// FIXME ^ Comment out this lineborrow_i32(_ref_to_i32);// scop结束,_ref_to_i32释放}//scope结束//此时,已经没有借用了,因此可以释放eat_box_i32(boxed_i32);
}
这篇关于[rust-014]关于形如T的borrowing借用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!