Rust所有权系统详解:借用检查器如何保证内存安全
3 阅读
预计 3 分钟
Rust的所有权系统是其最核心的特性,也是区别于其他语言的关键。本文将深入讲解所有权规则、借用机制和生命周期,帮助你理解Rust如何在编译期就消除内存安全问题。
## 什么是所有权?
Rust通过所有权系统管理内存,无需垃圾回收器。三条核心规则:
1. Rust中每个值都有一个所有者(owner)
2. 同一时刻只能有一个所有者
3. 当所有者离开作用域,值被丢弃(drop)
```rust
fn main() {
let s1 = String::from("hello");
let s2 = s1; // s1的所有权转移给s2
// println!("{}", s1); // 编译错误!s1已失效
println!("{}", s2); // 正常
}
```
## 借用与引用
借用允许你引用值而不获取所有权:
- 不可变引用 &T:允许多个同时存在
- 可变引用 &mut T:同一时刻只能有一个
```rust
fn calculate_length(s: &String) -> usize {
s.len()
}
fn append_string(s: &mut String) {
s.push_str(", world");
}
```
## 生命周期
生命周期标注帮助编译器验证引用的有效性:
```rust
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
```
理解所有权系统是掌握Rust的基础,它能让你写出既安全又高效的代码。
0 条评论 欢迎参与讨论