Rust destruktor

Rust destruktor
Rust gir en mekanisme for å gi opprydding på haugen. Drop -egenskapen i rust lar deg kjøre en "destruktør" når en verdi ikke lenger er nødvendig. En vanlig sak er hvis en verdi går ut av omfang.

Rustdestruktøren består av to komponenter:

  1. En samtale for å slippe :: Drop hvis drop -egenskapen implementeres av verdypelen.
  2. Et auto-generert dråpe som rekursivt kaller destruktøren på verdien av verdien. Dette fjerner behovet for at du fortsetter å ringe destruktøren.

Rusttyper som Box, VEC, String, File and Processes implementerer Drop -egenskapen som standard for å frigjøre ressursene.

Implementering av Rust Drop -egenskap

La oss se hvordan vi kan implementere en egenskap for en tilpasset type.

Syntaksen for drop -egenskap er som vist:

trekkfall
fn drop (& mut self);

Som nevnt vil Rust automatisk slippe en verdi hvis den går ut av omfang. Dette gjøres i omvendt skapelsesrekkefølge.

Ta eksempel nedenfor som implementerer en drop -egenskap for en tilpasset type.

Bruk std :: tråd;
Bruk std :: tid :: varighet;
strukturer
Brukernavn: & 'Statisk STR,

Impliser slipp for bruker
fndrop (& mutself)
Println!("Slipp ", selv.brukernavn);


fnMain ()
// Omfang 1
La _User1 = bruker brukernavn: "brukernavn1";

// Omfang 2
La _User2 = bruker brukernavn: "brukername2";

// Omfang 3
La _User3 = bruker brukernavn: "brukername3";
La _User4 = bruker brukernavn: "brukername4";
Println!("Utgangsomfang 3");

Println!("Exited Scope 3");
Println!("---------------------------------------------------------------------------------------------------- ");
// vente
Tråd :: Sov (varighet :: fra_millis (1500));
Println!("Eksprang 2");

Println!("Exited Scope 2");
Println!("---------------------------------------------------------------------------------------------------- ");
// slipp variabel manuelt
Tråd :: Sov (varighet :: fra_millis (1500));
slipp (_user1);
Println!("Hovedfunksjonen lukk!");
Println!("---------------------------------------------------------------------------------------------------- ");

Hvis vi kjører koden over, bør vi se en utdata som vist nedenfor:

La oss forklare hva koden ovenfor gjør. Vi starter med å definere en tilpasset type ved hjelp av en struktur. Merk at vi spesifiserer brukernavnfeltet for å ha en statisk levetid.

Deretter definerer vi en drop -egenskap for brukertypen. Dette er en enkel drop -egenskap som bare skriver ut til konsollen når en variabel blir droppet etter at den går ut av omfang.

I hovedfunksjonen oppretter vi en forekomst av brukerstrukturen som heter “User1”.

Vi lager deretter to nye blokker som inneholder sitt eget omfang og definerer variabler i hvert omfang.

Legg merke til Println -meldingen som beskriver når vi skal ut av omfanget, og når en variabel blir droppet.

Vi implementerer også en søvnvarighet for å illustrere bryteren mellom omfang.

Til slutt slipper vi variabelen manuelt i hovedomfanget ved å bruke slippfunksjonen som definert i drop -egenskapen.

Konklusjon

Denne korte artikkelen illustrerer hvordan du implementerer droptrekk for tilpassede typer og hvordan dråpe fungerer når en variabel går ut av omfang.