请谨记这些规则:
1. Rust 中的每一个值都有一个被称为其 所有者(owner)的变量。
2. 值有且只有一个所有者。
3. 当所有者(变量)离开作用域,这个值将被丢弃。
移动(MOVE)语义:
1 一个变量可以把他拥有的值转移给令一个变量,称为“所有权转移”。赋值语句,函数调用,函数返回等,都有可能导致所有权转移。
2 Rust中的变量绑定操作,默认是move语义,执行了新的变量绑定后,原来的变量就不能再被使用了。
复制(Copy,Clone)语义:
1 实现了Copy,Clone trait的类型,赋值都是走复制语义的。
Box类型
1 Box类型是Rust中常用的指针类型。它代表“拥有所有权的指针”
2 Box类型永远执行的是Move语义。
借用:
变量对其管理的内存拥有所有权。这个所有权是可以借用(borrow)的.
借用指针的语法 &(只读借用) 或者 & mut(可读写借用).
借用规则:
1 借用指针不能比它指向的变量存在的时间更长。
2 &mut型借用只能指向本身具有mut修饰的变量,对于只读变量,不可以有&mut型借用。
3 &mut型借用指针存在的时候,被借用的变量本身会处于"冻结"状态。
4 如果只有&型借用指针,那么可以同事存在多个;如果是&mut型,那么只能存在一个;如果同事有其他&或者&mut型借用指针,那么会出现编译错误。
生命周期标记:
1 生命周期符号使用单引号开头,后面个一个合法的名字。生命周期标记和发行类型参数是一样的,需要先声明后使用。
2 生命周期之间有重要的包含关系。如果生命周期 'a 比 'b 更长或相等,则标记炜 'a: 'b,意思是 'a 至少不会比'b短。
3 'static是一个特殊的生命周期,它代表的是这个程序从开始到结束的整个阶段,所以它比其他任何生命周期都长。
生命周期自动补全规则:
1 每个带生命周期参数的输入参数,每个对应不同的生命周期参数。
2 如果只有一个输入参数带生命周期参数,那么返回值的生命周期被指定炜这个参数;
3 如果有多个输入参数带生命周期参数,但其中有&self, &mut self,那么返回值的生命周期被指定为这个参数;
4 以上都不满足,就不能自动补全返回值的生命周期参数。