什么是Rust的所有权系统?
Rust最独特的特性就是所有权系统(Ownership System)。与C/C++需要手动管理内存、Python/Java依赖垃圾回收不同,Rust通过所有权规则在编译期就保证了内存安全,无需垃圾回收器。
所有权三大规则
- Rust中每个值都有一个所有者(owner)
- 同一时刻,值只能有一个所有者
- 当所有者离开作用域,值会被自动释放
代码示例:所有权转移
fn main() {
let s1 = String::from("hello");
let s2 = s1; // s1 的所有权转移给 s2
// println!("{}", s1); // 编译错误!s1 已失效
println!("{}", s2); // 正常工作
}
借用与引用
如果不想转移所有权,可以使用引用(reference)来"借用"值:
fn calculate_length(s: &String) -> usize {
s.len()
}
fn main() {
let s1 = String::from("hello");
let len = calculate_length(&s1); // 借用 s1
println!("'{}' 的长度是 {}", s1, len); // s1 仍然有效
}
总结
| 概念 | 说明 |
|---|---|
| 所有权 | 每个值有且仅有一个所有者 |
| 移动 | 赋值或传参时所有权转移,原变量失效 |
| 克隆 | 使用 clone() 深拷贝,两个变量各自独立 |
| 借用 | 通过 & 引用访问数据,不获取所有权 |
0 条评论 欢迎参与讨论