← Rust コース
43. Deref — スマートポインタを参照のように使う
Box の中身に * で届けるのは、Box が Deref トレイトを実装しているからです。Deref は「* を付けたらどの値への参照を返すか」を決めるトレイトで、impl<T> Deref for MyBox<T> のように自作の型にも実装できます。
Deref を実装すると「参照外し型強制」という変換も働きます。&MyBox<String> を &str を取る関数にそのまま渡せるのはこのおかげで、実務で String を &str の引数に渡せていたのも同じ仕組みです。
type Target = T; は「* で取り出される型」を宣言する行で、Deref の実装に必須のお決まりの1行です。スマートポインタが普通の参照と同じ顔で使える理由はここにある、と分かるとライブラリの型の挙動が読み解けます。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Rust
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗