Box — single ownership, heap. Rc — reference counting, single-threaded. Arc — atomic reference counting, multi-threaded.
Box:
1let b = Box::new(5);2println!("{}", b); // 5
Rc:
1use std::rc::Rc;23let rc1 = Rc::new(vec![1, 2, 3]);4let rc2 = Rc::clone(&rc1);5println!("{}", Rc::strong_count(&rc1)); // 2
Arc:
1use std::sync::Arc;2use std::thread;34let arc1 = Arc::new(vec![1, 2, 3]);5let arc2 = Arc::clone(&arc1);67thread::spawn(move || {8 println!("{:?}", arc2);9});
Key differences: