資料結構中的生命週期

如果資料型別會儲存借用的資料,則必須使用生命週期註解:

#[derive(Debug)]
struct Highlight<'doc>(&'doc str);

fn erase(text: String) {
    println!("Bye {text}!");
}

fn main() {
    let text = String::from("The quick brown fox jumps over the lazy dog.");
    let fox = Highlight(&text[4..19]);
    let dog = Highlight(&text[35..43]);
    // erase(text);
    println!("{fox:?}");
    println!("{dog:?}");
}
This slide should take about 5 minutes.
  • 在上述範例中,Highlight 的註解會強制執行以下規定:若是包含在內的 &str 的基礎資料,留存時間應至少和使用該資料的所有 Highlight 例項一樣長。
  • 如果在 fox (或 dog) 的生命週期結束前消耗 text,借用檢查器會擲回錯誤。
  • 含有借用資料的型別會強制要求使用者保留原始資料。這在建立輕量檢視畫面可能很實用,但通常也會增加使用難度。
  • 請盡可能讓資料結構直接擁有資料。
  • 某些內含多個參照的結構體可擁有多個生命週期註解。如果除了結構體的生命週期之外,還需要描述參照之間的生命週期關係,就可能有必要擁有多個生命週期註解。那些是相當進階的用途。