Dereferenciación de Punteros Sin Formato
La creación de punteros es un proceso seguro, pero para anular las referencias, es necesario utilizar unsafe
:
Speaker Notes
This slide should take about 10 minutes.
Se recomienda (y es obligatorio en la guía de estilo Rust de Android) escribir un comentario para cada bloque unsafe
explicando cómo el código que contiene cumple los requisitos de seguridad de las operaciones inseguras que realiza.
En el caso de la desreferenciación de punteros, significa que los punteros deben ser válidos, por ejemplo:
- El puntero no puede ser nulo.
- El puntero debe ser desreferenciable (dentro de los límites de un único objeto asignado).
- El objeto no debe haberse desasignado.
- No debe haber accesos simultáneos a la misma ubicación.
- Si el puntero se ha obtenido enviando una referencia, el objeto subyacente debe estar activo y no puede utilizarse ninguna referencia para acceder a la memoria.
En la mayoría de los casos, el puntero también debe estar alineado adecuadamente.
En la sección “INSEGURO” se muestra un ejemplo de un tipo común de error comportamiento indefinido: *r1
tiene el tiempo de vida 'static
, por lo que r3
tiene el tipo &'static String
y, por lo tanto, su duración es mayor que la de s
. Para crear una referencia a partir de un puntero hay que tener mucho cuidado.