Escribir Funciones Unsafe (Inseguras)

Puedes marcar tus propias funciones como unsafe si requieren condiciones concretas para evitar un comportamiento indefinido.

/// Swaps the values pointed to by the given pointers.
///
/// # Safety
///
/// The pointers must be valid and properly aligned.
unsafe fn swap(a: *mut u8, b: *mut u8) {
    let temp = *a;
    *a = *b;
    *b = temp;
}

fn main() {
    let mut a = 42;
    let mut b = 66;

    // Safe because ...
    unsafe {
        swap(&mut a, &mut b);
    }

    println!("a = {}, b = {}", a, b);
}

En realidad, no usaríamos punteros para este caso porque se puede hacer de forma segura con referencias.

Ten en cuenta que el código inseguro se admite en una función insegura sin un bloque unsafe. Podemos prohibirlo con #[deny(unsafe_op_in_unsafe_fn)]. Prueba a añadirlo para ver qué ocurre.