所有权与内存
Riddle 把“谁拥有值”“谁暂时借用值”和“值存放在哪里”分成三件事:
- 所有权决定值何时被移动,以及
Drop何时运行; - 借用检查约束
&T与&mut T能否同时存在; - 逃逸分析决定值保留在栈上,还是提升到保守式非移动 GC 堆。
堆分配不会放宽所有权规则。一个值即使被提升到 GC 堆,移动后仍不能继续使用,借用冲突仍会报错,实现了 Drop 时仍按所有者结束的位置析构。
先阅读移动语义,理解赋值、传参、模式绑定与 Copy;再阅读引用与逃逸,理解借用、引用来源和自动堆提升。
match 和 for 的非 Copy 模式绑定会取得对应值的所有权。未继续移动的绑定在 arm 或当前循环轮次结束时析构;break、continue 和 return 也会先清理正在离开的绑定。实现了 Drop 的类型不能在 match / for 模式中解构移出非 Copy 字段,这种代码会报告 E0305(let 解构当前不在此列)。