以前讲到 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
就行了, 主要是避免手动实现出错.指针