RustのOwnership
Box()を使用した例
以下のように書くとpointはスタックフレームへ、(0.625, 0.5)はヒープへ確保される
code:rs
let point = Box::new((0.625, 0.5));
カニ本 第1版.icon p.74 図4-4のcompoesersの例を見ればわかるように、すべての値に唯一の所有者がいる
これはツリー構造
ツリーの一部が drop されたらその子供はすべて drop される
明示的にfree()や delete()のような関数を使って値を drop することはできない
移動について
変数への代入、関数への引数の受け渡し、関数からの返り値の返却、のときは値はコピーされない!!!(例外あり?)
move される
受け渡し元は、所有権を受け渡し、そいつ自体は未初期化状態になる
値を代入したとき(let t = s;)に、move が起こり、s は未初期化状態になる
clone()でディープコピー
move が起こると未初期化状態になるのでそこになにか値を代入しても何も drop されない
code:rs
let mut s = "hello".to_string();
let t = s; // sが未初期化状態へ。
s = "world".to_string();
x ベクタから値を移動する 3 つの方法(ちゃんと読んでない)
for...in にベクタを渡すと所有権が for ループの内部構造に move される
どんなときに move されるのかをちゃんと知っておかないといけないなあ
所有権を関数などに移して、返り値なしに関数を抜けたら、その値は消費され消滅するのか
x take()メソッド(未読)
整数や文字,bool などは例外。そもそもヒープに何も置かない
↑ これができる型を Copy 型という
所有権の感じをvisualizationしてくれるらしい
所有権が移動するタイミングはどういうときか?
特に、関数呼び出し関連で
また、その時のメモリレイアウトも知りたい
関数呼び出しごときでいちいち所有権の移動を點せたくないからRustの参照を使うのかmrsekut.icon 参考