03. Rust 内存管理 Copy & Clone(下)

栏目: 编程语言 · Rust · 发布时间: 6年前

内容简介:之前讲到 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 就好了, 主要是避免手动实现出错.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法

算法

Robert Sedgewick、Kevin Wayne / 人民邮电出版社 / 2012-3 / 99.00元

《算法(英文版•第4版)》作为算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述。第4版具体给出了每位程序员应知应会的50个算法,提供了实际代码,而且这些Java代码实现采用了模块化的编程风格,读者可以方便地加以改造。本书配套网站提供了本书内容的摘要及更多的代码实现、测试数据、练习、教学课件等资源。 《算法(英文版•第4版)》适合......一起来看看 《算法》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具