Rust 1 分钟
Rust 所有权:把约束当成 API
Rust 的所有权不是负担,是设计语言的一部分。
一句话
所有权不是限制你「不能做什么」,而是把 C++ 里隐式的契约显式化。
三个规则
- 每个值有唯一的 owner
- owner 离开作用域时值被 drop
- 赋值或传参默认是 move,要 copy 必须显式
借用规则
- 任意数量
&T,或 - 唯一一个
&mut T - 不能同时存在
这条规则是 Rust 内存安全的根本。
难点不是规则,是默认 move
let s1 = String::from("hi");
let s2 = s1;
// s1 不再可用
习惯了 C++ copy 语义的人会卡在这里。
记住一句:要 copy,加 .clone();要借用,加 &;要 ownership 转移,啥都不加。
设计语言
写库的时候,签名的 & / &mut / owned 直接表达了「我用不用、改不改、要不要留着」。这是别的语言没有的明确度。
C++ 里 const T& 也表达了「只读」,但与 T&(可变引用)混在一起就模糊了。