Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

所有权与内存

Riddle 把“谁拥有值”“谁暂时借用值”和“值存放在哪里”分成三件事:

  • 所有权决定值何时被移动,以及 Drop 何时运行;
  • 借用检查约束 &T&mut T 能否同时存在;
  • 逃逸分析决定值保留在栈上,还是提升到保守式非移动 GC 堆。

堆分配不会放宽所有权规则。一个值即使被提升到 GC 堆,移动后仍不能继续使用,借用冲突仍会报错,实现了 Drop 时仍按所有者结束的位置析构。

先阅读移动语义,理解赋值、传参、模式绑定与 Copy;再阅读引用与逃逸,理解借用、引用来源和自动堆提升。

matchfor 的非 Copy 模式绑定会取得对应值的所有权。未继续移动的绑定在 arm 或当前循环轮次结束时析构;breakcontinuereturn 也会先清理正在离开的绑定。实现了 Drop 的类型不能在 match / for 模式中解构移出非 Copy 字段,这种代码会报告 E0305let 解构当前不在此列)。