- 参照が有効になるスコープのこと
- 参照はすべてライフタイムを保持する
- 一般的に暗黙に推論される
- 一般に、借用元のライフタイムが借用先のライフタイムより短いと、コンパイルエラーとなる
- 関数の引数、アウトプット引数、構造体のフィールドなどにライフタイムを示す必要がある
- 関数の引数: `fn hoge<'a>(x: &'a u8) -> &'a u8`
- 構造体: `struct Hoge<'a> { x: &'a u8 }`
- メソッド: `impl<'a> Hoge<'a> `{}`
- `'static`(静的ライフタイム): プログラム全体に渡って生存できる。
- 文字列
- staticで定義された定数
- constで定義された定数
- Box::leakでリークされたデータ
# ライフタイム省略規則
- 本来はすべての関数の引数にライフタイムを付けないといけないが、いくつかのパターンでは省略できる
- 推論規則
- 規則1: 各引数はそれぞれ別のライフタイム引数を得る
- 規則2: 1つだけしかライフタイム引数がないなら、そのライフタイムがすべての出力ライフタイム引数に代入される
- 規則3: 複数の入力ライフタイム引数があるが、メソッド(引数の1つが`&self`)の場合は、selfのライフタイム引数がすべての出力ライフタイム引数に代入される