Escrevendo Funções Inseguras
Você pode marcar suas próprias funções como inseguras (unsafe
) se elas exigirem condições específicas para evitar comportamentos indefinidos.
/// Troca os valores apontadoes pelos ponteiros fornecidos. /// /// # Segurança /// /// Os ponteiros precisam ser válidos e corretamente alinhados. 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; // Seguro porque ... unsafe { swap(&mut a, &mut b); } println!("a = {}, b = {}", a, b); }
Na verdade, não usaríamos ponteiros para essa operação porque isso pode ser feito com segurança usando referências.
Observe que o código inseguro é permitido dentro de uma função insegura sem o uso de um bloco unsafe
. Podemos proibir isso com #[deny(unsafe_op_in_unsafe_fn)]
. Tente adicioná-lo e veja o que acontece.