Rc
Rc is a reference-counted shared pointer. Use this when you need to refer
to the same data from multiple places:
use std::rc::Rc; fn main() { let a = Rc::new(10); let b = Rc::clone(&a); dbg!(a); dbg!(b); }
Each Rc points to the same shared data structure, containing strong and weak
pointers and the value:
- See ArcandMutexif you are in a multi-threaded context.
- You can downgrade a shared pointer into a Weakpointer to create cycles that will get dropped.
This slide should take about 5 minutes. 
                    - Rc’s count ensures that its contained value is valid for as long as there are references.
- Rcin Rust is like- std::shared_ptrin C++.
- Rc::cloneis cheap: it creates a pointer to the same allocation and increases the reference count. Does not make a deep clone and can generally be ignored when looking for performance issues in code.
- make_mutactually clones the inner value if necessary (“clone-on-write”) and returns a mutable reference.
- Use Rc::strong_countto check the reference count.
- Rc::downgradegives you a weakly reference-counted object to create cycles that will be dropped properly (likely in combination with- RefCell).