🚀 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 文档了解更多详细信息。

    如果有任何不清楚的地方请告诉我!