Rc es un puntero compartido, Rc es de contado por referencias, es decir que va contando las referencias. Se usa cuando se necesita hacer referencia a los mismos datos de varios lugares:
use std::rc::Rc;
fn main() {
let mut a = Rc::new(10);
let mut b = Rc::clone(&a);
println!("a: {a}");
println!("b: {b}");
}
Rc garantiza que el valor contenido sea válido mientras haya referencias.
Rc en Rust es como std::shared_ptr en C++.
Rc::clone es económico: crea un puntero a la misma asignación y aumenta el recuento de referencias. No realiza una clonación profunda y generalmente se puede ignorar cuando se buscan problemas de rendimiento en el código.
make_mut en realidad clona el valor interno si es necesario (“clonar en escritura”) y devuelve una referencia mutable.
Utilice Rc::strong_count para comprobar el recuento de referencia.
Rc::downgrade le brinda un objeto con recuento débil de referencias para crear ciclos que se eliminarán correctamente (probablemente en combinación con RefCell, en la siguiente post).