ExpertiDict

Rust · Avançado · Inglês · Técnico

UnsafeCell

/ʌnˈseɪf sɛl/substantivo

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.

Veja também

Todos os termos de Rust