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 mut a = Rc::new(10);
    let mut b = a.clone();

    println!("a: {a}");
    println!("b: {b}");
}

If you need to mutate the data inside an Rc, you will need to wrap the data in a type such as Cell or RefCell. See Arc if you are in a multi-threaded context.

  • Like C++’s std::shared_ptr.
  • clone is cheap: creates a pointer to the same allocation and increases the reference count.
  • make_mut actually clones the inner value if necessary (“clone-on-write”) and returns a mutable reference.