✨
[Rust備忘録]Box<T>, Rc<T>, RefCell<T>を選択する理由の要約
Rust The Book より。
Rc<T>
は、同じデータに複数の所有者を持たせてくれる;Box<T>
とRefCell<T>
は単独の所有者。Box<T>
では、不変借用も可変借用もコンパイル時に精査できる;Rc<T>
では不変借用のみがコンパイル時に精査できる;RefCell<T>
では、不変借用も可変借用も実行時に精査される。RefCell<T>
は実行時に精査される可変借用を許可するので、RefCell<T>
が不変でも、RefCell<T>
内の値を可変化できる。
文章だとこんがらがるので、表にしてみた。
スマートポインタ | 所有者 | 借用 |
---|---|---|
Box<T> | 単独 | 不変借用も可変借用もコンパイル時に精査 |
Rc<T> | 複数 | 不変借用のみがコンパイル時に精査 |
Refcell<T> | 単独 | 不変借用も可変借用も実行時に精査 |
※ RefCell<T>
は実行時に精査される可変借用を許可するので、 RefCell<T>
が不変でも、 RefCell<T>
内の値を可変化できる。
うん。見やすい。
Discussion