Rust Smart Pointers

Rust Smart Pointers
I suggerimenti non sono una novità per nessun programmatore. Sono una funzione che consente di utilizzare le variabili per archiviare un indirizzo in memoria. L'indirizzo quindi "indica", quindi puntatore, ai dati archiviati in quella posizione.

I puntatori intelligenti sono puntatori con funzionalità estese, come controlli vincolati e gestione automatica della memoria. I puntatori intelligenti includono anche metadati aggiuntivi. Ora, il concetto di puntatori intelligenti non è nuovo, soprattutto per i programmatori C ++.

Per questo articolo, esploreremo vari puntatori intelligenti come definito nella Biblioteca Standard Rust.

Punti chiave

In Rust, i puntatori intelligenti sono strutture di dati, tuttavia, a differenza dei normali puntatori, i puntatori intelligenti possono effettivamente possedere i dati. Sono comunemente implementati usando le strutture ma differiscono dalle normali strutture nel senso che implementano tratti Deref e drop.

Ci sono 5 puntatori intelligenti da sapere in ruggine:

  1. Scatola
  2. Deref
  3. Gocciolare
  4. Rc
  5. Refcell

NOTA: In Rust si riferisce al tipo di dati.

Tieni presente che non coprirà tutti i puntatori intelligenti in questo articolo.

Scatola

Il puntatore Smart Box fornisce un modo per fare riferimento ai dati archiviati nella memoria heap. Per impostazione predefinita, Rust alloca tutto sulla memoria dello stack. Utilizzando il puntatore Smart Box, possiamo accedere ai dati sul heap, incorrendo senza esame delle prestazioni.

The Box Smart Pointer obbedisce anche alle regole di proprietà e prestito. Quindi, ha un singolo proprietario di dati e può avere un solo riferimento mutabile e qualsiasi numero di riferimenti immutabili.

fn main ()
// Scatola
let var = box :: new (100);
println!("Value: ", var)

Nell'esempio sopra, abbiamo un puntatore intelligente Box che memorizza il valore 5 nel mucchio. Tieni presente che la scatola stessa è memorizzata nello stack.

Una volta terminato il programma, la casella viene trattata dalla memoria.

Deref

Come suggerisce il nome, il puntatore intelligente Deref viene utilizzato per consentire la manipolazione dell'operazione di dereferencing. Utilizzando il puntatore Deref Smart, è possibile creare una struttura che può funzionare sia con puntatore intelligente che con riferimenti.

Un codice di esempio è come mostrato di seguito:

Usa std :: ops :: deref;
Custum struct
Dati: t,

impl Deref per la coltivazione
// Param di tipo generico
tipo target = t;
fn deref (& self) -> & t
&se stesso.dati


fn main ()
let x = custux data: 100;
println!("Value: ",*(x.Deref ()))

Gocciolare

Il puntatore Drop Smart viene utilizzato per liberare la memoria allocata nel mucchio. Il tratto di caduta in ruggine gestisce liberamente la memoria quando una variabile esce dall'ambito. Non abbiamo bisogno di chiamare questo tratto manualmente, come la Rust lo farà per noi. Tuttavia, possiamo implementarlo per i tipi personalizzati come mostrato.

struct mystruct
X: i32,

Impl Drop per mystruct
fn drop (& mut self)
println!("Droping: ", self.X)


fn main ()
let _x = mystruct x: 100;
let _y = mystruct x: 200;

Il suddetto implementa il tratto di caduta per il tratto personalizzato. L'output è come mostrato:

Droping: 200

Droping: 100

Conclusione

In questo articolo, copriamo come creare e lavorare con comuni puntatori intelligenti nel linguaggio di programmazione ruggine. Puoi saperne di più su Rust Smart Pointer nella risorsa qui sotto:

https: // doc.Rust-Lang.Org/Book/CH15-00-Smart-Pointers.html