内容简介:之前讲到 Rust 有部分类型是默认实现了像 整型, 浮点型, 布尔型, 字符型, 都是实现了Rust 的结构体, 枚举类型, 如果它们的内部都是
之前讲到 Rust 有部分类型是默认实现了 std::marker::Copy
trait 的.
Rust 有很多类型, 有 整型, 浮点型, 布尔型 和 字符型, 还有 元组, 数组, 此外还有结构体, 枚举类型, & 借用指针, &mut 可变借用指针, 还有标准库提供的类型...
默认实现了 Copy 的类型
像 整型, 浮点型, 布尔型, 字符型, 都是实现了 Copy
trait 的, 元组类型, 如果某个元组内的值都实现了 Copy
trait, 那这个元组也是 impl Copy
类型, 数组同理.
需要手动实现 Copy 的类型
Rust 的结构体, 枚举类型, 如果它们的内部都是 impl Copy
的, 那么它们也可以自己手动 impl Copy
.
无法实现 Copy 的类型
Box
就是无法实现 Copy
的类型, 原因很简单, 如果 Box
可以实现 Copy
, 那么就会有多次释放这类问题. 还有可变借用指针的类型 &mut T
, 同样的理由.
Clone
Rust 有些类型是实现了 std::clone::Clone
trait 的. 实现了这个 trait 就可以有 clone
函数. 这个 trait 还有一个 clone_from
函数, 这个函数是有默认实现的.
#[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
就好了, 主要是避免手动实现出错.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Go 语言内存管理(二):Go 内存管理
- Objective-C的内存管理(1)——内存管理概述
- [译] 图解 Go 内存管理与内存清理
- 图解 Go 内存管理器的内存分配策略
- Go:内存管理分配
- Redis内存管理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。