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:
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 ()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;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 mystructIl 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