プログラミング言語Rust 4章 メモ
4.1 所有権
- 所有権は決まった契機で移動(Move)される
- これがありがたい(と個人的に感じた場面)は、Cで関数にポインタを持ち込んだ後に解放し忘れてしまうケース
- 所有権が移ったあとにスコープを外れると解放してくれるので、安全設計。
- あとで使うなら適当な参照渡しを乱用するんじゃなくて、ちゃんと戻り値にする(すると所有権も戻る)。
4.2 参照と借用
- とは言ってもそれは不便すぎるため、Rustも&での参照渡しができる。参照渡しにすると、所有権は移らない。
- 渡した先で参照値を変更したい場合、mut指定しなければならない。
- Rustの仕様として 1つのスコープでmut可能な参照は1つのみ にすることで、不用意なデータ競合を防ぐ。
やばいコードの例
let mut s = String::from("hello");
let r1 = &s; // どこかで
let r2 = &s; // 参照される
let r3 = &mut s; // 参照されてる間、知らんうちに変更される😇
4.3 スライス
- スライスの用法は他の言語と同じ
- スライスは不変の参照として扱われ、所有権の規則が平等に適用される
(スライスで参照している値は可変参照での変更ができない)