RUST 所有权---内存安全

请谨记这些规则:

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 以上都不满足,就不能自动补全返回值的生命周期参数。

你可能感兴趣的:(Rust,rust,开发语言,后端)