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