【Rust】スマートポインタに慣れる
todo.icon まじでわからん。全く理解できてない。咀嚼して理解していこう
Rustでは、標準ライブラリに定義された色々なスマートポインタが、 参照以上の機能を提供します。
なるほど、スマートポインタってのは普通のポインタ以上の機能を持ってるものなのだな。
そして、そのスマートポインタにも色んな種類があると。
一つの例が、参照カウント方式のスマートポインタ型です。 このポインタのおかげでデータに複数の所有者を持たせることができます。 所有者の数を追いかけ、所有者がいなくなったらデータの片付けをしてくれるからです。
なるほどねonigiri.w2.icon
参照はデータを借用するだけのポインタなのです。 対照的に多くの場合、スマートポインタは指しているデータを所有します。
となると?なんだどう言うことだ。
多くのルーチンは、このポインタから参照する形で使うのかな?
この本の中でいくつかのスマートポインタに遭遇してきました。例えば第8章のStringやVec<T>です。
ええええええ
スマートポインタは普通、構造体を使用して実装されています。スマートポインタを通常の構造体と区別する特徴は、 スマートポインタがDerefとDropトレイトを実装していること
なるほど。DerefとDropが実装されてたら、それはもうスマートポインタということでよろしいか?onigiri.w2.icon
スマートポインタパターンがRustにおいてよく使われる一般的なデザインパターンであることを考えれば、この章で既存のスマートポインタを全て取り扱うことなどできません。 多くのライブラリに独自のスマートポインタがあり、自分だけのスマートポインタを書くことさえできるのです。
はい。
シンプルなスマートポインタであるBox<T>を使ってみよう。
Derefトレイトを実装することで、参照外し演算子の*(掛け算やグロブ演算子とは違います)の振る舞いをカスタマイズできます。
Derefトレイトが参照外しの実装ってことかな。
暗黙的に参照外しされるのもこれのおかげなのかな。
q.icon 参照と参照外しの関係がごっちゃごちゃでよくわからん。理解できねぇ....onigiri.w2.icon
むじぃ...
Rc<T>は参照カウントというスマートポインタの省略形
以下のような場面で役立つ
大多数の場合、所有権は明らかです: 一体どの変数が与えられた値を所有しているかわかるのです。 ところが、単独の値が複数の所有者を持つ可能性のある場合もあります。例えば、グラフデータ構造では、 複数の辺が同じノードを指す可能性があり、概念的にそのノードはそれを指す全ての辺に所有されるわけです。 指す辺がなくならない限り、ノードは片付けられるべきではありません。
Rc<T>はシングルスレッドで使われることを想定してるので注意
はいonigiri.w2.icon
おっけい。わけわからん。ありがとうonigiri.w2.icon
所有権と借用まではなんとなくわかるんやけど、それ以上のシステム内部に関わりそうなところになると全くわからん。キッツイ。