数据结构中的生命周期
如果数据类型存储了借用的数据,则必须对其添加生命周期注释:
#[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
实例一样长。 - 如果
text
在fox
(或dog
)的生命周期结束前被消耗,借用检查器将抛出一个错误。 - 借用数据的类型会迫使用户保留原始数据。这对于创建轻量级视图很有用,但通常会使它们更难使用。
- 如有可能,让数据结构直接拥有自己的数据。
- 一些包含多个引用的结构可以有多个生命周期注释。除了结构体本身的生命周期之外,如果需要描述引用之间的生命周期关系,则可能需要这样做。这些都是非常高级的用例。