Rust 生命周期

解决悬垂指针

当函数引用或被函数之外的代码引用时,让 Rust 自身分析出参数或返回值的生命周期几乎是不可能的。这些生命周期在每次函数被调用时都可能不同。这也就是为什么我们需要手动标记生命周期

小生命周期中可以引用大生命周期的变量,这样可以保证引用值一直有效

泛型生命周期 <'a> // 写在函数名,struct 名,impl 名后面(用于结构体和其方法的入参上)
<'a, 'b: 'a> // 生命周期子类型,b 至少比 a 活得久
然后为参数和返回标记生命周期(&'c str)。函数或方法的参数的生命周期被称为 输入生命周期input lifetimes),而返回值的生命周期被称为 输出生命周期output lifetimes)。

多个参数标记为同一个生命周期时取交集,意味着取小的那个
标记并不能改变生命周期,只是帮助编译器理解程序 // 去语法糖操作

包含引用的结构体需要标记生命周期

符合一些规则时可以省略生命周期,如果编译器检查完规则后仍然存在没有计算出生命周期的引用,编译器将会停止并生成错误:
  • 每一个是引用的参数都有它自己的生命周期参数
  • 如果只有一个输入生命周期参数,那么它被赋予所有输出生命周期参数
  • 如果方法有多个输入生命周期参数,不过其中之一因为方法的缘故为 &self 或 &mut self,那么 self 的生命周期被赋给所有输出生命周期参数

特殊的生命周期 'static,其生命周期存活于整个程序期间。所有的字符串字面值都拥有 'static 生命周期