生命周期
小于 1 分钟
生命周期
- Rust 的每个引用都有自己的生命周期
- 生命周期: 引用保持有效的作用域
- 大多数情况: 生命周期是隐式的,可被推断的
- 当引用的生命周期可能以不同的方式互相关联时: 手动标注生命周期
生命周期存在的意义:
避免悬垂引用
let r; { let x = 1; r = &x; } println!("{}", x)
Example
fn notify<'a >(item: &'a String) -> &'a str {}
struct Typename<'a > {
ins: &'a str,
}
impl<'a> Example<'a> {
fn func<'a>(a: &self, b: &'a str ) -> &String {} // 输出的生命周期是&self的
fn function(a: &self, b: str) -> &String // also
}
生命周期省略规则:
- 规则 1: 每个引用类型都有自己的生命周期
- 规则 2: 如果只有一个生命周期参数,那么该生命周期会赋给所有的输出的生命周期
- 规则 3: 如果有输入多个生命周期参数,但其中一个是
&self
or&mut self
,那么self
的生命周期会赋值给所有输出的生命周期
静态生命周期
'static
所有字符串切片的生命周期