Mari kita pikirkan beberapa smart pointer yang sudah pernah kita lihat seperti Vec<T> dan String.
Vec<T> adalah sebuah smart pointer yang hanya memiliki sebuah wilayah memori berupa byte. Kompiler Rust tidak tahu apa yang ada di dalam byte-byte tersebut. Smart pointer ini menafsirkan apa artinya mengambil item dari wilayah memori yang dikelolanya, melacak di mana struktur data di dalam byte-byte tersebut dimulai dan berakhir, dan akhirnya mendereferensikan sebuah raw pointer ke struktur data menjadi sebuah antarmuka yang rapi dan ergonomis untuk kita gunakan (contoh my_vec[3]).
Demikian pula, String melacak sebuah wilayah memori berupa byte, dan secara programatik membatasi konten yang ditulis ke dalamnya agar selalu valid utf-8, serta membantu mendereferensikan wilayah memori tersebut menjadi tipe &str.
Kedua struktur data ini menggunakan dereferensiasi unsafe dari raw pointer untuk melakukan pekerjaan mereka.
Detail memori: