Rust 中的引用

借用

  • 在可变借用持续的时间内,不可再对这个变量进行借用

  • 任何借用持续的时间内不能操作原变量

  • 对借用的取值可以自动解引用,对借用的赋值需要手动解引用

多种引用

  1. 解引用使用 * 符号

  2. 当 T 实现了 Deref 这个 Trait ,* 符号调用 deref 函数返回的值就是解引用结果

  3. &T 是引用了 T 的一个结构体,Box <T> 也是一样,* 可用来消除 & 或 Box<>

  4. 一般解引用后的最终结果要是单层引用,而不能把所有权给出去,所以自己写 deref 在返回的所有权的变量前要加上 &,类似 &*x,这么写是因为不能直接把自己的变量给出去改变所有权,所以会绕一圈

  5. Option< T > 提供了方法直接对 T 进行引用相关操作,as_ref, as_deref

  6. &T 任意传入方法都不会影响到内存块所有权变更,保护内存不被随意释放

  7. 形参传入方法会自动解引用到对应需要的类型

  8. 引用包括 &T, Box,Rc,Arc,Cell,指针, 都是定长的 size 大小,可指向所有的逻辑地址的大小

  9. 不定长大小的为 Trait, [T], 特征和切片是不定长的,切片可以看作是数组的特征。

  10. 特征可以指代一个定长实体,使用特征就是通过特定入口使用定长实体,所以使用特征有出错的可能

  11. 单从特征也无法推断出该特征所指代的实体的长度

  12. rust 编译期间变量(都在栈内)都得是定长的,所以不能有特征变量,

  13. 所以创建引用特征变量到对应的所有权实体,所有权实体可以使用 Box 放在堆里

最后更新于