当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Unpin用法及代码示例


本文简要介绍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-lang.org大神的英文原创作品 Trait std::marker::Unpin。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。