本文简要介绍rust语言中 Trait std::marker::Unpin
的用法。
用法
pub auto trait Unpin { }
固定后可以安全移动的类型。
Rust 本身没有不可移动类型的概念,并且认为移动(例如,通过赋值或 mem::replace
)始终是安全的。
Pin
使用 type 来防止通过类型系统进行移动。指针P<T>
包在Pin<P<T>>
包装纸无法移出。请参阅pin
模块有关固定的更多信息的文档。
为 T
实现 Unpin
特征解除了对类型的限制,然后允许使用 mem::replace
等函数将 T
移出 Pin<P<T>>
。
Unpin
对于非固定数据根本没有任何影响。尤其,std::mem::replace快乐地移动!Unpin
数据(它适用于任何&mut T
,不仅仅是当T: Unpin
)。但是,您不能使用std::mem::replace关于包在 a 内的数据Pin<P<T>>
因为你无法得到&mut T
你需要那个,并且那是这个系统发挥作用的原因。
因此,例如,这只能在实现 Unpin
的类型上完成:
use std::mem;
use std::pin::Pin;
let mut string = "this".to_string();
let mut pinned_string = Pin::new(&mut string);
// We need a mutable reference to call `mem::replace`.
// We can obtain such a reference by (implicitly) invoking `Pin::deref_mut`,
// but that is only possible because `String` implements `Unpin`.
mem::replace(&mut *pinned_string, "other".to_string());
几乎每种类型都会自动实现此特征。
外来类型的实现
为参数实现Unpin
为 FormatSpec 实现 Unpin
实现 Unpin 用于对齐
为计数实现Unpin
相关用法
- Rust UnixStream用法及代码示例
- Rust UnixStream.take_error用法及代码示例
- Rust UnixListener.accept用法及代码示例
- Rust UnsafeCell.new用法及代码示例
- Rust UnixListener.bind用法及代码示例
- Rust UnixDatagram.peek_from用法及代码示例
- Rust UnsafeCell.into_inner用法及代码示例
- Rust UnixDatagram.recv_from用法及代码示例
- Rust UnixListener.incoming用法及代码示例
- Rust UnixStream.read_timeout用法及代码示例
- Rust UnixDatagram.take_error用法及代码示例
- Rust Union用法及代码示例
- Rust UnixDatagram.peek用法及代码示例
- Rust UnixDatagram.send_to_addr用法及代码示例
- Rust UnixDatagram.read_timeout用法及代码示例
- Rust UnixDatagram.set_nonblocking用法及代码示例
- Rust UnixDatagram.connect用法及代码示例
- Rust UnsafeCell.get用法及代码示例
- Rust UnixDatagram.set_read_timeout用法及代码示例
- Rust UnixStream.peer_addr用法及代码示例
- Rust UnixDatagram.send_to用法及代码示例
- Rust UnixStream.send_vectored_with_ancillary用法及代码示例
- Rust UnixStream.peek用法及代码示例
- Rust UnixListener.set_nonblocking用法及代码示例
- Rust UnixDatagram.shutdown用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait std::marker::Unpin。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。