Rust 最震撼人心的核心设计——零 GC 实现内存安全。深入剖析所有权三定律、移动语义 (Move) 与 Drop 析构时机。

1. 所有权三定律

  1. Rust 中每一个值都有一个被称为其 所有者 (Owner) 的变量。
  2. 值在任一时刻 有且只有一个 所有者。
  3. 当所有者离开作用域时,这个值将被 自动丢弃 (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 语义使得旧变量立刻失效。