Rustの所有権
from Rust入門
Rustの所有権
- スコープ外れたら自動でdropする
- dropは階層structの場合親から
- より正確にいうと、「所有権が何かに結びついた時のブロックのスコープ」を抜けるとdropする
- 所有権が何かに結びついた時とは:
- 変数の宣言 let a = b
- 引数に変数自体を渡す f(a)
- 関数呼ぶ時に値を渡す(ownershipを渡す)と、その関数のスコープの終わりでdropされる
- これ驚き
- それが困るなら、ownershipを渡すのではなく、閲覧権を貸す
- &で
- 借りる方の引数の型も、Fooではなく&Foo
- この時、元のやつへの参照アドレスをメモリが持つ感じか
- 参照外し
- 参照元の値を得たい時(&TをTに変えたい時)は、*
を付ける
- 自動の参照外しもある
- 単純な算術演算子で計算する時は自動的に&TをTに変換してくれる
- なぜ?
- +関数とか-関数を通してるから、関数の引数の&TはTとして扱えるみたいな感じかな
- 編集権を貸すこともできる
- 面白い
- 貸してる間は、元のやつは編集できない
- 編集権持ってるやつは一つだけにしようという考え方
- 貸してるやつがdropされたら、編集権は帰ってくる
- 貸してるやつを通じて元の値をget/setする時は、*
をつける
- rules
- > Rust では、可変な参照が 1 つだけか、不変な参照が複数かのどちらかが許可されます。両方を同時には使用できません。
- > 参照は所有者よりも長く存在してはなりません。