8.5 `Unpin` trait(可解除固定)
05-
Unpin trait(可解除固定) — Comprehensive Rust1分钟内可阅读完
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/unsafe-deep-dive/pinning/unpin-trait.html
8.5 Unpin trait(可解除固定)
Unpin类型即使被Pin包装也可以自由移动- 大多数类型都实现
Unpin,因为它是「auto trait」 auto trait的行为可以更改:!Unpin类型绝不能移动- 包含
PhantomPinned字段的类型默认不实现Unpin
说明:当某个类型实现了
Unpin时,不会触发Pin<Ptr>的 pinning 行为。该值可以自由移动。说明:几乎所有类型都实现
Unpin;由编译器自动实现。实现
Unpin的类型相当于声明:「我保证没有自引用,因此移动我总是安全的。」问:哪些类型可能是
!Unpin?
- 编译器生成的 future
- 包含
PhantomPinned字段的类型- 某些包装 C++ 对象的类型
!Unpin类型一旦被固定就不能再移动