When to use Rc vs Box?

Rc provides shared ownership so by default its contents can’t be mutated, while Box provides exclusive ownership and thus mutation is allowed:

use std::rc::Rc;

fn main() {
    let mut a = Box::new(1);
    let mut b = Rc::new(1);

    *a = 2; // works
    *b = 2; // doesn't
}

In addition Rc cannot be sent between threads, because it doesn’t implement Send.

The bottom line is they are meant for different things: if you don’t need shared access, use Box; otherwise, use Rc (or Arc for multi-threaded shared usage) and keep in mind you will be needing Cell or RefCell for internal mutability.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)