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