Pensiamo ad alcuni smart pointer che abbiamo già visto, come Vec<T> e String.
Vec<T> è uno smart pointer che possiede semplicemente una regione di memoria fatta di byte. Il compilatore di Rust non ha idea di cosa esista in questi byte. Lo smart pointer interpreta cosa significa prendere elementi dalla regione di memoria che gestisce, tiene traccia di dove iniziano e finiscono le strutture dati all'interno di quei byte, e infine dereferenzia un puntatore grezzo in strutture dati per darci un'interfaccia bella ed ergonomica da usare (es. my_vec[3]).
Allo stesso modo, String tiene traccia di una regione di memoria fatta di byte, e limita programmaticamente il contenuto scritto in essa affinché sia sempre utf-8 valido, aiutando a dereferenziare quella regione di memoria in un tipo &str.
Entrambe queste strutture dati usano la dereferenziazione unsafe di puntatori grezzi per fare il loro lavoro.
Dettagli sulla memoria: