Rust smarte pekere

Rust smarte pekere
Pekere er ikke en ny ting for noen programmerer. De er en funksjon som lar deg bruke variabler for å lagre en adresse i minnet. Adressen "peker på", derav peker, til data som er lagret på det stedet.

Smarte pekere er pekere med utvidede evner, for eksempel bundne sjekker og automatisk minnestyring. Smarte pekere inkluderer også flere metadata. Nå er ikke konseptet med smarte pekere nytt, spesielt ikke for C ++ -programmerere.

For denne artikkelen vil vi utforske forskjellige smarte pekere som definert i Rust Standard Library.

Viktige punkter

I rust er smarte pekere datastrukturer, men i motsetning til normale pekere, kan smarte pekere faktisk eie data. De implementeres ofte ved bruk av strukturer, men skiller seg fra normale strukturer i den forstand at de implementerer Deref- og drop -egenskaper.

Det er 5 smarte pekere å vite i rust:

  1. Eske
  2. Deref
  3. Miste
  4. Rc
  5. Refcell

MERK: I rust refererer til datatypen.

Husk at ikke dekker alle smarte pekere i denne artikkelen.

Eske

Boksen Smart Pointer gir en måte å referere til data som er lagret i heapminnet. Som standard tildeler Rust alt på stabelminnet. Ved hjelp av boksen smart peker kan vi få tilgang til data på haugen, og har ingen ytelse overhead.

The Box Smart Pointer adlyder også eierreglene og lån. Derfor har den en enkelt eier av data og kan bare ha en mutbar referanse og et hvilket som helst antall uforanderlige referanser.

fn main ()
// boks
La var = Box :: Ny (100);
Println!("Verdi: ", var)

I eksemplet over har vi en boks smart peker som lagrer verdien 5 i haugen. Husk at selve boksen er lagret i stabelen.

Når programmet er avsluttet, blir boksen omgjort fra minnet.

Deref

Som navnet antyder, brukes Deref Smart Pointer for å tillate manipulering av derferencing -operasjonen. Ved hjelp av Deref Smart Pointer kan du lage en struktur som kan fungere med både smart peker og referanser.

Et eksempelkode er som vist nedenfor:

Bruk std :: ops :: derf;
Struct CustBox
Data: t,

impl Deref for CustBox
// generisk type param
type mål = t;
fn derf (& self) -> & t
&selv.data


fn main ()
La X = CustBox Data: 100;
Println!("Verdi: ",*(x.derf ())))

Miste

Drop Smart Pointer brukes til fritt minne som er tildelt i haugen. Drop -egenskapen i rust håndterer fri minnet når en variabel går ut av omfang. Vi trenger ikke å kalle denne egenskapen manuelt, da rust vil gjøre dette for oss. Vi kan imidlertid implementere det for tilpassede typer som vist.

struct myStruct
X: I32,

Impliser slipp for myStruct
fn drop (& mut self)
Println!("Dropping: ", selv.x)


fn main ()
La _x = myStruct x: 100;
La _y = myStruct x: 200;

Ovennevnte implementerer droptrekk for tilpasset egenskap. Utgangen er som vist:

Dropping: 200

Slipp: 100

Konklusjon

I denne artikkelen dekker vi hvordan vi kan lage og jobbe med vanlige smarte pekere på rustprogrammeringsspråket. Du kan lære mer om Rust Smart Pointers i ressursen nedenfor:

https: // doc.Rust-Lang.org/bok/CH15-00-smart-poeng.html