Betrachten wir ein paar Smart Pointer, die wir bereits kennengelernt haben, wie Vec<T> und String.
Vec<T> ist ein Smart Pointer, der einfach eine Speicherregion aus Bytes besitzt. Der Rust-Compiler hat keine Ahnung, was in diesen Bytes existiert. Der Smart Pointer interpretiert, was es bedeutet, Elemente aus der Speicherregion zu holen, die er verwaltet, behält im Blick, wo Datenstrukturen innerhalb dieser Bytes beginnen und enden, und dereferenziert schließlich einen rohen Zeiger auf Datenstrukturen in eine schöne, ergonomische Schnittstelle für uns (z. B. my_vec[3]).
Ähnlich verhält es sich bei String: Er behält eine Speicherregion aus Bytes im Blick, beschränkt programmatisch die in sie geschriebenen Inhalte, damit sie immer gültiges utf-8 sind, und hilft dabei, diese Speicherregion in einen Typ &str zu dereferenzieren.
Beide Datenstrukturen verwenden unsicheres Dereferenzieren von rohen Zeigern, um ihre Arbeit zu erledigen.
Speicherdetails: