capypad
0 Tage Serie
rust / intermediate
Snippet

Lebenszeiten in Struct-Definitionen

Wenn eine Struct Referenzen enthält, muss Rust wissen, wie lange diese Referenzen gültig sind. Lebenszeit-Annotationen ('a) etablieren einen Vertrag, dass die Referenzen innerhalb der Struct die Daten, auf die sie verweisen, nicht überleben werden. Die Struct kann nicht länger existieren als die Daten, auf die sie verweist.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
struct Quote<'a> {
content: &'a str,
author: &'a str,
}
 
fn main() {
let text = String::from("The only way to do great work is to love what you do.");
let quote = Quote {
content: &text,
author: &text,
};
println!("{} - {}", quote.content, quote.author);
}
Erklärung
1
struct Quote<'a> {
Deklariert einen Lebenszeitparameter 'a, den jede Referenz in dieser Struct erfüllen muss
2
content: &'a str,
Ein geliehener String-Slice, der mindestens so lange leben muss wie die Lebenszeit 'a
3
author: &'a str,
Beide Referenzen teilen sich dieselbe Lebenszeit, was eine konsistente Borrowing-Dauer gewährleistet
4
let quote = Quote { content: &text, author: &text };
Beide Referenzen zeigen auf dieselbe geowned String, was die Lebenszeit-Beschränkung erfüllt