當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。