2.5.5 Copy 与重借用
1分钟内可阅读完
译文 · 基于 Learning Rust
Copy 与重借用
原文链接: https://quinedot.github.io/rust-learning/st-reborrow.html
共享引用(&T)实现了 Copy,这使它们非常灵活。一旦拥有一个,你就可以拥有任意多个;一旦对外暴露了一个,你就无法追踪还有多少个。
独占引用(&mut T)不实现 Copy。
相反,你可以通过一种称为*再借用(reborrowing)*的机制方便地使用它们。例如:
| |
在第 1 行把 v: &mut Vec<i32> 传给 push 时,你并没有移动它,否则第 2 行就无法打印 v。
但你也没有复制它,因为 &mut _ 不实现 Copy。
相反,*v 被再借用为一个比 'v 更短的生命周期,该生命周期在第 1 行结束。
显式的再借用看起来像这样:
| |
在再借用 &mut *v 存在期间不能使用 v,但它「过期」之后,又可以继续使用 v。
这样,两个 &mut 仍然是独占借用。
尽管文档严重不足,再借用正是让 &mut 可用的关键;Rust 中有大量隐式再借用。
再借用使 &mut T 在某些方面表现得像可 Copy 的 &T。但 &mut T 存在时必须独占,这导致它灵活得多。
再借用本身是个大话题,但你至少应理解它的存在,以及它如何让 Rust 在仍能保证内存安全的同时保持可用与 ergonomic。