Revenons sur quelques pointeurs intelligents que tu connais déjà: Vec<T>
et String
.
Vec <T>
est un pointeur intelligent vers des octets en mémoire. Le
compilateur Rust n'a aucune idée de la manière dont il faut interpréter ces octets.
Le pointeur intelligent est capable d'interpréter ces octets en gardant
une trace de l'endroit dans ces octets où une structures de données commence
et se termine. Le pointeur intelligent déréférence un pointeur brut pour
exposer la structure de données dans une belle interface ergonomique propre
que nous utilisons (par exemple my_vec [3]
).
De même, String
garde une trace des octets en mémoire et restreint par
programmation le contenu qui y est écrit à toujours être de l'utf-8
valide. Il déréférence cette région de mémoire dans un type&str
.
Ces deux structures de données doivent procéder à un déréférencement dangereux de pointeurs bruts.
Détails de la mémoire: