Hay que tener en cuenta algunos punteros inteligentes que ya hemos visto, como Vec<T>
y String
.
Vec<T>
es un puntero inteligente que sólo posee alguna región de memoria de bytes. El compilador de Rust no tiene ni idea de lo que existe en estos bytes. El puntero inteligente interpreta lo que significa tomar elementos de la región de memoria que gestiona, mantiene un registro de dónde comienzan y terminan las estructuras de datos dentro de esos bytes, y luego finalmente indirecciona un puntero sin procesar en estructuras de datos en una interfaz ergonómica y sencilla para que la usemos. (e.g. my_vec[3]
).
String
mantiene un registro de una región de memoria de bytes, y restringe de forma programada el contenido que se escribe en ella para que siempre sea válido en utf-8
y ayude a indireccionar esa región de memoria en un tipo &str
.
Ambas estructuras de datos usan la indirección no segura de los punteros sin procesar para desempeñar sus tareas.
Detalles de la memoria: