Les pointeurs intelligents ont tendance à utiliser assez souvent du code dangereux (en anglais unsafe). Comme mentionné précédemment, ce sont des outils courants pour interagir au plus bas niveau de la mémoire.
Qu'est-ce qu'un code dangereux? Un code dangereux se comporte exactement comme un code normal à l'exception que le compilateur Rust ne garantie pas la validité du programme.
La première cause d'un code dangereux est lorsqu'on essaye de
déréférencer un pointeur brut. Cela signifie prendre un pointeur brut
correspondant à une adresse mémoire, déclarer "une structure de données existe ici!"
et transformer les octets de cet emplacement mémoire dans une représentation
de données que l'on pourra utiliser (par exemple *const u8
en u8
).
Puisque Rust ne garantie pas la signification des octets (il ne garde
pas de traces), il place le déréférencement dans un bloc unsafe {...}
.