[Rust備忘録]Box<T>, Rc<T>, RefCell<T>を選択する理由の要約

2022/01/30に公開

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> 内の値を可変化できる。

うん。見やすい。

GitHubで編集を提案

Discussion