结论:所有权规则只有三条——1)Rust 中每个值都有一个被称为所有者(owner)的变量;2)同一时刻一个值只能有一个所有者;3)当所有者离开作用域,值被自动丢弃(调用 drop)。整套借用、生命周期机制都是这三条规则的推论。

展开:规则 2 决定了赋值和传参默认是移动(move)而非复制,否则同一值会有两个所有者,析构时会 double free。规则 3 是 RAII 的体现:内存、文件句柄、锁守卫等资源随作用域结束自动释放,无需手动 free,也没有 GC 停顿。易错点:所有权规则约束的是"变量绑定"而非数据本身,通过借用(&T/&mut T)可以在不转移所有权的前提下临时使用值。

{
    let s = String::from("hi"); // s 是所有者
    let t = s;                  // 所有权转移给 t,s 失效
}                               // t 离开作用域,String 被释放

追问方向:为什么移动后原变量不能再用(防止 double free 与悬垂)、Copy 类型为何例外。