Rc
Rc
é um ponteiro compartilhado com contagem de referência. Use-o quando precisar consultar os mesmos dados a partir de vários locais:
use std::rc::Rc; fn main() { let a = Rc::new(10); let b = Rc::clone(&a); println!("a: {a}"); println!("b: {b}"); }
- Veja
Arc
eMutex
se você estiver em um contexto multi-thread. - Você pode demover (downgrade) um ponteiro compartilhado para um ponteiro
Weak
(fraco) para criar ciclos que serão descartados.
This slide should take about 5 minutes.
- O contador do
Rc
garante que os seus valores contidos sejam válidos enquanto houver referências. Rc
em Rust é comostd::shared_ptr
em C++.Rc::clone
é barato: ele cria um ponteiro para a mesma alocação e aumenta a contagem de referência. Ele não faz um “clone profundo” (deep clone) e geralmente pode ser ignorado ao procurar problemas de desempenho no código.make_mut
realmente clona o valor interno se necessário (“clone-on-write”) e retorna uma referência mutável.- Use
Rc::strong_count
para verificar a contagem de referência. Rc::downgrade
fornece um objeto com contagem de referência fraca (weakly reference-counted) para criar ciclos que serão descartados corretamente (provavelmente em combinação comRefCell
).