郭
←返回首页郭佳恩前端工程师
20 分钟阅读技术专栏
Rust 所有权系统解析:内存安全的基石
所有权(Ownership)是 Rust 最独特的特性。它让 Rust 无需垃圾回收(GC)即可保证内存安全。
RustSystems ProgrammingBackend
Rust 的核心特性就是所有权。虽然这个概念在其他语言中也有,但 Rust 将其编码到了语言核心中。
所有权规则
- Rust 中的每一个值都有一个被称为其 所有者(owner)的变量。
- 值在任一时刻有且只有一个所有者。
- 当所有者(变量)离开作用域,这个值将被丢弃。
变量作用域
rustfn main() { { // s 在这里无效, 它尚未声明 let s = "hello"; // 从此处起,s 是有效的 // 使用 s println!("{}", s); } // 此作用域已结束,s 不再有效 }
移动(Move)与克隆(Clone)
在 Rust 中,对于堆上数据,赋值操作默认是移动,而不是浅拷贝。
rustlet s1 = String::from("hello"); let s2 = s1; // println!("{}, world!", s1); // 错误!s1 已经无效了 println!("{}, world!", s2); // 正确
如果你确实需要深度复制 String 堆上的数据,可以使用 clone 方法:
rustlet s1 = String::from("hello"); let s2 = s1.clone(); println!("s1 = {}, s2 = {}", s1, s2);
引用与借用
rustfn calculate_length(s: &String) -> usize { // s 是对 String 的引用 s.len() } // 这里,s 离开了作用域。但因为它并不拥有引用值的所有权, // 所以什么也不会发生