初面网初面网

所有权与借用

所有权

计算机程序必须在运行时管理它们所使用的内存资源。

所有权是 Rust 语言为高效使用内存而设计的语法机制。它能够让 Rust 在编译阶段更有效地分析内存资源的有用性。

所有权有以下三条基础规则:

  • Rust 中的每个值都有一个变量,称为其所有者。
  • 一次只能有一个所有者。
  • 当所有者不在程序运行范围时,该值将被删除。
let s = "hello world";
let s2 = s;

println!("{}", s2);
println!("{}", s);

借用

Rust 允许我们在不获取所有权的情况下使用值,这就是借用。

let s = String::from("hello world");
let s2 = &s;

println!("{}", s2);
println!("{}", s);

借用分为可变借用和不可变借用:

  • 不可变借用:允许多个不可变引用同时存在,但不能修改数据。
  • 可变借用:允许只有一个可变引用同时存在,可以修改数据。
let mut s = String::from("hello world");
let s2 = &mut s;
s2.push_str("!");
println!("{}", s);

需要注意的是,在同一作用域内,不能同时存在可变引用和不可变引用:

let mut s = String::from("hello world");
let s2 = &s;
let s3 = &mut s;

编译器会报错,因为 s2 是不可变引用,而 s3 是可变引用,它们不能同时存在。

可变引用只能有一个

let mut s = String::from("hello world");
let s2 = &mut s;
let s3 = &mut s;

编译器会报错,因为 s2 和 s3 都是可变引用,它们不能同时存在。

更新于 2026/6/11