Rust 最震撼人心的核心设计——零 GC 实现内存安全。深入剖析所有权三定律、移动语义 (Move) 与 Drop 析构时机。
1. 所有权三定律
- Rust 中每一个值都有一个被称为其 所有者 (Owner) 的变量。
- 值在任一时刻 有且只有一个 所有者。
- 当所有者离开作用域时,这个值将被 自动丢弃 (Drop) 并释放对应的堆内存。
fn main() {
let s1 = String::from("hello"); // s1 申请堆内存
let s2 = s1; // 所有权转移 (Move),s1 失效!
// println!("{}", s1); // 编译报错:borrow of moved value: `s1`
println!("{}", s2); // 正常打印
} // s2 离开作用域,自动调用 drop 释放堆空间
2. 为什么是 Move 而不是浅拷贝?
如果允许 s1 和 s2 同时指向同一片堆内存,当二者离开作用域时会触发 双重释放 (Double Free),造成严重的内存安全隐患。因此 Rust 强制通过 Move 语义使得旧变量立刻失效。