第 2 章:所有权与借用

第 2 章:所有权与借用

2.1 所有权规则

Rust 的内存安全核心在于所有权系统。每个值都有一个所有者,且同一时刻只能有一个所有者。

  • 变量离开作用域时值会被释放
  • 赋值时发生移动,而不是复制(对于非 Copy 类型)
let s1 = String::from("hello");
let s2 = s1; // s1 的所有权移动到 s2

2.2 可变性与借用

Rust 强制借用规则:

  • 一个不可变引用 &T 或多个不可变引用
  • 一个可变引用 &mut T
  • 同一时间只能存在一个可变引用,不能与不可变引用混合
let mut s = String::from("hello");
let r1 = &s;
let r2 = &s;
println!("{} {}", r1, r2);
let r3 = &mut s;

2.3 引用生命周期

生命周期用于保证引用在使用时仍然有效。

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() { x } else { y }
}
  • <'a> 定义生命周期参数
  • 函数签名中标记引用的生命周期关系

2.4 所有权与函数调用

函数参数传递会移动或借用值:

fn takes_ownership(s: String) {
    println!("{}", s);
}

fn makes_copy(x: i32) {
    println!("{}", x);
}
  • String 会移动所有权
  • i32Copy 类型,可复制

2.5 案例练习

练习建议:

  • 实现一个函数接收 String 并返回其长度
  • 编写一个函数返回两个字符串中较长的那个
  • 观察不同借用方式下编译器如何报错
posted on 2026-05-06 22:35  小樊童鞋  阅读(0)  评论(0)    收藏  举报