我已经彻底阅读了Pin的文档和几篇关于它的文章.我没有关于Pin的问题,为什么这很重要.除了一个:为什么Pin必须拿着指针?为什么它不能直接保留数据(例如拥有它)?
也许,这样的决定是因为Pin只在编译时存在?
我已经彻底阅读了Pin的文档和几篇关于它的文章.我没有关于Pin的问题,为什么这很重要.除了一个:为什么Pin必须拿着指针?为什么它不能直接保留数据(例如拥有它)?
也许,这样的决定是因为Pin只在编译时存在?
Rust中的每一种类型都是平凡可移动的,所以如果变量中有该类型的值,并且没有活动的borrow ,则始终可以将其移动到不同的位置.
Pin
的全部意义在于,它引用的数据被"固定"到一个特定位置,使得该值不可移动(除非固定的类型实现Unpin
).不过,Pin
本身就是一个活字,就像其他任何类型一样,所以只要不是借来的,你就可以自由地移动.
如果Pin
直接包含固定的数据而不是使用引用,会发生什么情况?然后,移动Pin
也会移动它的所有字段,包括它包含的固定数据,这显然会打破该类型的固定保证.
正因为如此,Pin
不能正确地包含固定的数据,并且它只能与不在所指向的数据周围移动的指针类型一起工作,特别是当指针本身被移动时(包括标准指针类型,如&T
、&mut T
、Box<T>
、Rc<T>
等).