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