Dev Study
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つの具体例で確認します。

公式ドキュメントで詳しく ↗