Gli smart pointer tendono a usare abbastanza spesso codice unsafe. Come accennato prima, sono strumenti comuni per interagire con i livelli più bassi della memoria in Rust.
Cos'è il codice unsafe? Il codice unsafe si comporta esattamente come il normale codice Rust, con l'eccezione di alcune capacità sulle quali il compilatore di Rust non può dare garanzie.
Una capacità fondamentale del codice unsafe è dereferenziare un puntatore grezzo. Questo significa prendere un puntatore grezzo verso una posizione in memoria e dichiarare "qui esiste una struttura dati!", trasformandolo in una rappresentazione di dati che puoi usare (es. *const u8 in u8).
Rust non ha modo di tenere traccia del significato di ogni byte scritto in memoria. Poiché Rust non può dare garanzie su cosa esiste a un numero arbitrario usato come puntatore grezzo, mette la dereferenziazione in un blocco unsafe { ... }.
Gli smart pointer dereferenziano puntatori grezzi estensivamente, ma sono ben collaudati in ciò che fanno.