简介

Rust 的所有权系统是其最独特的特性,它使 Rust 能够在没有垃圾回收的情况下保证内存安全。

所有权规则

Rust 的所有权规则:

  1. 每个值都有一个所有者(owner)
  2. 同一时刻只能有一个所有者
  3. 当所有者离开作用域时,值会被丢弃

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
fn main() {
// 💡 s 拥有这个 String
let s = String::from("hello");

// 💡 所有权转移给 s2
let s2 = s;

// ❌ 编译错误:s 已经无效
// println!("{}", s);

// ✅ 只有 s2 可以使用
println!("{}", s2);
}

借用与引用

1
2
3
4
5
6
7
8
9
10
11
fn calculate_length(s: &String) -> usize {
// 💡 只借用,不获取所有权
s.len()
}

fn main() {
let s = String::from("hello");
let len = calculate_length(&s);
// ✅ s 仍然有效
println!("Length of '{}' is {}", s, len);
}

可变引用

1
2
3
4
5
6
7
8
9
10
11
12
fn main() {
let mut s = String::from("hello");

// 💡 可变引用
change(&mut s);

println!("{}", s); // 输出 "hello, world"
}

fn change(s: &mut String) {
s.push_str(", world");
}

总结

所有权系统是 Rust 的核心特性,理解它对于编写安全高效的 Rust 代码至关重要。

参考资料