sY.zhang.
笔记
Rust 1 分钟

Rust 所有权:把约束当成 API

Rust 的所有权不是负担,是设计语言的一部分。

一句话

所有权不是限制你「不能做什么」,而是把 C++ 里隐式的契约显式化。

三个规则

  1. 每个值有唯一的 owner
  2. owner 离开作用域时值被 drop
  3. 赋值或传参默认是 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&(可变引用)混在一起就模糊了。