数据结构中的生命周期

如果数据类型存储了借用的数据,则必须对其添加生命周期注释:

  1. #[derive(Debug)]
  2. struct Highlight<'doc>(&'doc str);
  3. fn erase(text: String) {
  4. println!("Bye {text}!");
  5. }
  6. fn main() {
  7. let text = String::from("The quick brown fox jumps over the lazy dog.");
  8. let fox = Highlight(&text[4..19]);
  9. let dog = Highlight(&text[35..43]);
  10. // erase(text);
  11. println!("{fox:?}");
  12. println!("{dog:?}");
  13. }

This slide should take about 5 minutes.

  • 在上述示例中,Highlight 注释会强制包含 &str 的底层数据的生命周期至少与使用该数据的任何 Highlight 实例一样长。
  • 如果 textfox(或 dog)的生命周期结束前被消耗,借用检查器将抛出一个错误。
  • 借用数据的类型会迫使用户保留原始数据。这对于创建轻量级视图很有用,但通常会使它们更难使用。
  • 如有可能,让数据结构直接拥有自己的数据。
  • 一些包含多个引用的结构可以有多个生命周期注释。除了结构体本身的生命周期之外,如果需要描述引用之间的生命周期关系,则可能需要这样做。这些都是非常高级的用例。