我已经彻底阅读了 Pin 的文档和一些相关文章。我对 Pin 没有任何疑问,也不知道它为什么重要。除了一个:为什么 Pin 必须持有指针?为什么它不能直接保存数据(例如拥有它)?
也许,做出这样的决定是因为 Pin 仅在编译时存在?
Rust 中的每种类型都是可移动的,因此如果变量中有该类型的值并且没有活动借用,则始终可以将其移动到不同的位置。
整个要点Pin是,它引用的数据被“固定”到特定位置,使得该值不可移动(除非固定类型实现Unpin)。然而,Pin它本身是一种可移动的类型,就像任何其他类型一样,因此只要不借用它就可以自由移动它。
Pin如果直接包含固定数据而不是使用引用会发生什么?然后,移动Pin也会移动其所有字段,包括它包含的固定数据,这显然会破坏该类型的固定保证。
因此,Pin无法正确包含固定数据,并且它只能与不围绕所指向的数据移动的指针类型一起使用,特别是当指针本身移动时(包括标准指针类型,如&T、&mut T、Box<T>、Rc<T>, ETC。)。
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |