資料結構中的生命週期
如果資料型別會儲存借用的資料,則必須使用生命週期註解:
#[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
,借用檢查器會擲回錯誤。 - 含有借用資料的型別會強制要求使用者保留原始資料。這在建立輕量檢視畫面可能很實用,但通常也會增加使用難度。
- 請盡可能讓資料結構直接擁有資料。
- 某些內含多個參照的結構體可擁有多個生命週期註解。如果除了結構體的生命週期之外,還需要描述參照之間的生命週期關係,就可能有必要擁有多個生命週期註解。那些是相當進階的用途。