Rust 中的引用
借用
在可变借用持续的时间内,不可再对这个变量进行借用
任何借用持续的时间内不能操作原变量
对借用的取值可以自动解引用,对借用的赋值需要手动解引用
多种引用
解引用使用 * 符号
当 T 实现了 Deref 这个 Trait ,* 符号调用 deref 函数返回的值就是解引用结果
&T 是引用了 T 的一个结构体,Box
<T>
也是一样,* 可用来消除 & 或 Box<>一般解引用后的最终结果要是单层引用,而不能把所有权给出去,所以自己写 deref 在返回的所有权的变量前要加上 &,类似 &*x,这么写是因为不能直接把自己的变量给出去改变所有权,所以会绕一圈
Option< T > 提供了方法直接对 T 进行引用相关操作,as_ref, as_deref
&T 任意传入方法都不会影响到内存块所有权变更,保护内存不被随意释放
形参传入方法会自动解引用到对应需要的类型
引用包括 &T, Box,Rc,Arc,Cell,指针, 都是定长的 size 大小,可指向所有的逻辑地址的大小
不定长大小的为 Trait, [T], 特征和切片是不定长的,切片可以看作是数组的特征。
特征可以指代一个定长实体,使用特征就是通过特定入口使用定长实体,所以使用特征有出错的可能
单从特征也无法推断出该特征所指代的实体的长度
rust 编译期间变量(都在栈内)都得是定长的,所以不能有特征变量,
所以创建引用特征变量到对应的所有权实体,所有权实体可以使用 Box 放在堆里
最后更新于