🚀 Rust 基础 4:Rust 中的所有权和借用
欢迎回到我们的 7 篇 Rust 教程中的第 4 篇。
Rust 的所有权模型非常独特,无需垃圾回收即可确保内存安全。让我们简化一下。
**第 1 步:了解所有权**
在 Rust 中,每个值都有一个所有者。当所有权发生变化时,原所有者将无法再使用该值。
例子:
fn main() { let s1 = String::from("hello"); // s1 owns the string let s2 = s1; // Ownership moves to s2 // println!("{}", s1); // This won't work: s1 is no longer valid println!("{}", s2); // s2 is the new owner }
s1 赋值给 s2 后无效。
这可以防止内存的双重释放。
**步骤 2:克隆值**
要保留原始值,请使用.clone()。
fn main() { let s1 = String::from("hello"); let s2 = s1.clone(); // Makes a deep copy println!("{}", s1); // Now s1 is still valid println!("{}", s2); }
**步骤 3:借鉴参考**
通过借用,你可以使用一个值,而无需通过传递引用(&value)获取所有权。
**例子**
fn main() { let s = String::from("hello"); let len = calculate_length(&s); // Borrow `s` with `&` println!("The length of '{}' is {}.", s, len); // `s` is still valid } fn calculate_length(s: &String) -> usize { // `s` is a reference s.len() // Access borrowed value }
&s 将引用传递给函数,因此 s 保留所有权。
该函数读取该值但不能修改它。
**关键规则**
借用允许多个不可变引用,但同时不允许可变引用。
**步骤 4:可变引用**
要修改值,请使用 &mut。
例子:
fn main() { let mut s = String::from("hello"); change(&mut s); println!("{}", s); } fn change(s: &mut String) { s.push_str(", world"); // Append to the string }
为防止冲突,一次只允许一个可变引用。
**第 5 步:所有权和借贷规则**
**今天的练习**
🎉 这就是 RUST BASICS 4 的全部内容!您已经学习了借用和所有权。在下一篇文章中,我们将介绍 Rust 中的结构和枚举。
欢迎在评论中分享你的解决方案或提问。祝你编码愉快!🦀
查看 Rust 文档了解更多详细信息。
如果有任何不清楚的地方请告诉我!