Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Lifetimes in Data Structures

Jeżeli typ danych przechowuje pożyczone dane, to muszą one mieć adnotcję czasu życia:

#[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.
  • W powyższym przykładzie, adnotacja na Highlight wymaga żeby dane w zawartym &str żyły co najmniej tak długo jak instancja Highlight, która używa tych danych.
  • Jeżeli text jest skonsumowany przed końcem życia fox (lub dog), to nadzorca pożyczania pokaże błąd.
  • Typy z pożyczonymi danymi wymagają od użytkowników utrzymywania oryginalnych danych. Jest to przydatne przy tworzeniu lekkich widoków, ale generalnie powoduje, że są trudniejsze w użyciu.
  • Jeżeli możliwe twórz struktury danych, które bezpośrednio są właścicielami swoich danych.
  • Niektóre struktury z wieloma referencjami mogą mieć więcej niż jedną adnotację cyklu życia. To może być potrzebne jeżeli potrzebujesz opisać relację cyklu życia pomiędzy referencjami w dodatku do cyklu życia samej struktury. Są to bardzo zaawansowane przypadki użycia.