Rust · Avançado · Inglês · Técnico
UnsafeCell
Primitiva do núcleo da linguagem para mutabilidade interior: o único meio legítimo de alterar dados atrás de uma referência compartilhada. Cell, RefCell e Mutex são feitos sobre ela.
Onde usar
Aparece ao implementar tipos de sincronização ou containers próprios. Sem UnsafeCell, alterar dados atrás de um &T é comportamento indefinido.
Em código
use std::cell::UnsafeCell;
let c = UnsafeCell::new(1);
unsafe {
*c.get() += 1;
println!("{}", *c.get());
}Exemplos
RefCell is built on top of UnsafeCell.
O RefCell é construído em cima do UnsafeCell.
Never cast a shared reference to mutable without UnsafeCell.
Nunca converta uma referência compartilhada em mutável sem UnsafeCell.
Cuidado
Obter o ponteiro com get é seguro, mas usá-lo exige unsafe e o compromisso de nunca criar aliasing indevido.