以前講到 Rust 有部分類型是默認實現了 std::marker::Copy
trait 的. Rust 有不少類型, 有 整型, 浮點型, 布爾型 和 字符型, 還有 元組, 數組, 此外還有結構體, 枚舉類型, & 借用指針, &mut 可變借用指針, 還有標準庫提供的類型...數組
像 整型, 浮點型, 布爾型, 字符型, 都是實現了 Copy
trait 的, 元組類型, 若是某個元組內的值都實現了 Copy
trait, 那這個元組也是 impl Copy
類型, 數組同理.ide
Rust 的結構體, 枚舉類型, 若是它們的內部都是 impl Copy
的, 那麼它們也能夠本身手動 impl Copy
.函數
Box
就是沒法實現 Copy
的類型, 緣由很簡單, 若是 Box
能夠實現 Copy
, 那麼就會有屢次釋放這類問題. 還有可變借用指針的類型 &mut T
, 一樣的理由.ui
Rust 有些類型是實現了 std::clone::Clone
trait 的. 實現了這個 trait 就能夠有 clone
函數. 這個 trait 還有一個 clone_from
函數, 這個函數是有默認實現的.spa
#[stable(feature = "rust1", since = "1.0.0")]
#[lang = "clone"]
pub trait Clone : Sized {
#[stable(feature = "rust1", since = "1.0.0")]
#[must_use = "cloning is often expensive and is not expected to have side effects"]
fn clone(&self) -> Self;
#[inline]
#[stable(feature = "rust1", since = "1.0.0")]
fn clone_from(&mut self, source: &Self) {
*self = source.clone()
}
}
複製代碼
理論上, 咱們能夠按照本身的要求實現 clone
, 對於有 Copy
約束的類型, 實現 Clone
trait 須要保證跟 Copy
是相容的, 也就是咱們本身實現的 Clone
不會致使 Copy
的行爲不正確. 一般狀況下咱們使用 Rust 的 #[derive(Clone)]
自動實現 Clone
就行了, 主要是避免手動實現出錯.指針