跳至主要內容

生命周期

ColorSky小于 1 分钟笔记Rust

生命周期

  • 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 所有字符串切片的生命周期