Rust生命周期(lifetime)与引用有效性
1. Rust生命周期(lifetime)是什么?
在 Rust 中,生命周期(Lifetime)是指一个变量或借用的有效时间范围。它指定了一个变量或借用在何时被创建,以及它在何时不再存在。Rust 中的每个变量或借用都有一个生命周期,它必须在其有效时间范围内被使用。如果一个变量或借用的生命周期结束了,那么它将不能再被访问,否则会引发编译时错误。生命周期通常由 Rust 中的编译器自动管理,开发者不需要手动管理生命周期。但是,开发者可以通过使用 Rust 的生命周期语法来指定生命周期,以实现更加精细的内存管理。
说明:
- 生命周期结束,变量和借用生命周期结束
- 生命周期由Rust自己掌管,开发人员无需手动管理
划重点:
- Rust 中的每一个引用都有其 生命周期(lifetime),也就是引用保持有效的作用域。大部分时候生命周期是隐含并可以推断的,正如大部分时候类型也是可以推断的一样。
例子:
fn mxsm(x: &str) -> &str {
x
}
上面的例子生命周期隐藏了。
2.生命周期(lifetime)标注
生命周期标注并不改变任何引用的生命周期的长短。与当函数签名中指定了泛型类型参数后就可以接受任何类型一样,当指定了泛型生命周期后函数也能接受任何生命周期的引用。生命周期标注描述了多个引用生命周期相互的关系,而不影响其生命周期。
生命周期参数名称必须以撇号('
)开头,其名称通常全是小写,类似于泛型其名称非常短。'a
是大多数人默认使用的名称。生命周期参数标注位于引用的 &
之后,并有一个空格来将引用类型与生命周期标注分隔开。
说明:
- 'static 是Rust内置的生命周期,相当于关键字。
- 生命周期标注告诉 Rust 多个引用的泛型生命周期参数如何相互联系的
2.1 变量生命周期标注
生命周期标注语法:
&i32 //引用默认
&'a i32 //带有显示生命周期
&'a mut i32 // 带有显式生命周期的可变引用