Durées de vie dans les structures
Champs empruntés
Durées de vie dans les structures est une leçon Learn Rust Coding gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn Rust Coding, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn Rust Coding comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Structs Can Borrow
Most structs own their data. But a struct can also hold a reference to data it does not own. When it does, the struct needs a lifetime parameter.
This guarantees the struct never outlives the borrowed data.
Declaring a Lifetime on a Struct
Add the lifetime in angle brackets after the struct name, then use it on the reference field. This says the struct cannot outlive that reference.
struct Excerpt<'a> {
text: &'a str,
}
fn main() {
let novel = String::from("Call me Ishmael. Some years ago...");
let first = novel.split('.').next().unwrap();
let e = Excerpt { text: first };
println!("{}", e.text);
}The Constraint It Adds
The annotation means an instance of Excerpt is valid only while the string it borrows is alive. The compiler enforces this everywhere the struct is used.
Methods on Borrowing Structs
Methods on such a struct also carry the lifetime in the impl header. Often you can omit lifetimes in the method body thanks to elision (covered next lesson).
struct Excerpt<'a> { text: &'a str }
impl<'a> Excerpt<'a> {
fn announce(&self) -> &str {
println!("Attention!");
self.text
}
}
fn main() {
let s = String::from("hello world");
let e = Excerpt { text: &s };
println!("{}", e.announce());
}Why Not Just Own the Data?
Owning (using String) is simpler and usually preferred. Borrowing avoids copying large data and is useful for parsers and views that look into existing buffers.
Reach for lifetimes in structs only when borrowing pays off.
A Parser View Example
A struct that holds slices into a source string is a classic use. It reads the original buffer without copying.
struct Token<'a> {
word: &'a str,
}
fn main() {
let line = String::from("let x = 5");
let tokens: Vec<Token> = line.split_whitespace().map(|w| Token { word: w }).collect();
for t in &tokens {
println!("token: {}", t.word);
}
}Multiple Reference Fields
A struct may hold several references. They can share one lifetime or use distinct ones, depending on how their validity relates.
struct Pair<'a> {
left: &'a str,
right: &'a str,
}
fn main() {
let a = String::from("foo");
let b = String::from("bar");
let p = Pair { left: &a, right: &b };
println!("{} {}", p.left, p.right);
}The Dangling Struct Error
If the borrowed data is dropped while the struct still exists, the compiler rejects it. The lifetime parameter is what makes this check possible.
Returning Borrowing Structs
A function building such a struct ties the struct's lifetime to its input. The struct cannot outlive the data passed in.
struct Wrap<'a> { inner: &'a str }
fn wrap<'a>(s: &'a str) -> Wrap<'a> {
Wrap { inner: s }
}
fn main() {
let text = String::from("wrapped");
let w = wrap(&text);
println!("{}", w.inner);
}Owned vs Borrowed Trade-off
Quick guide:
- Need to keep data around independently? Own it (
String,Vec). - Short-lived view into existing data? Borrow it with a lifetime.
Mental Model
A struct with 'a is like a sticky note attached to someone else's notebook: it is only meaningful while that notebook still exists. Rust makes sure you never read a note on a notebook that is gone.
Quick Check
Test your understanding of lifetimes in structs.
Recap
You learned lifetimes in structs:
- A struct holding a reference needs a lifetime parameter
- The lifetime ties the struct's validity to the borrowed data
- Methods carry the lifetime in the
implheader - Prefer owning unless borrowing avoids meaningful copies
Questions Fréquemment Posées
La leçon « Durées de vie dans les structures » est-elle gratuite ?
Oui — le texte complet de « Durées de vie dans les structures » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn Rust Coding, passe à CoddyKit PRO. Le cours Learn Rust Coding comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Durées de vie dans les structures » ?
Champs empruntés Tu pratiques Learn Rust Coding avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Learn Rust Coding ?
Aucune expérience préalable n'est requise. Learn Rust Coding sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Durées de vie dans les structures » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Learn Rust Coding ?
Oui. Chaque leçon Learn Rust Coding inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Pourquoi les durées de vie
- Annotations de durée de vie
- Durées de vie dans les structures
- Règles d’omission