トレイト
チェックポイント
- `Clone` と `Copy` Essential 値の複製方法を分類する二つのトレイト。`Clone` は「明示的な `.clone()` 呼び出しによってコピーを作れる(コストがかかる可能性がある)」ことを表す。`Copy` はより厳格な約束で「この値の複製はビット単位の単純なコピーだ」を意味し、コンパイラが暗黙的に値を複製できるようになる。どの組み込み型がそれぞれを実装しているか、`Copy` に `Clone` が必要な理由、そして `String` が `Clone` であるのに `Copy` でない理由を学ぶ。
- `Drop` トレイト Essential `Drop` を実装すると、その型の値がスコープを外れた瞬間にカスタムのクリーンアップコードを実行できる。`Drop` が `Box`、`Vec`、`String` のヒープメモリを自動的に解放する仕組み、コンパイラが `drop` をちょうど一度だけ実行することを保証する方法、そして `drop` をほとんど直接呼び出さなくてよい理由(コンパイラが各スコープの終端に呼び出しを挿入する)を学ぶ。
- `Sized` トレイトと `?Sized` Essential `Sized` はコンパイル時にサイズが判明しているすべての型が自動的に実装するマーカートレイト(marker trait)で、値をスタック上に置いたり値渡しできたりするための前提条件だ。すべてのジェネリック型パラメータに暗黙的な `T: Sized` 境界が付く理由、`T: ?Sized` で境界を緩和するタイミング、そして `Sized` でない Rust の型(スライス `[T]`、`str`、トレイトオブジェクト `dyn Trait`)を学ぶ。