すでに見たことのある Vec<T> や String のようなスマートポインタについて考えてみましょう。
Vec<T> は、あるメモリ領域のバイト列を単に所有しているだけのスマートポインタです。Rust コンパイラは、これらのバイトの中に何が存在するかを全く知りません。このスマートポインタは、自身が管理するメモリ領域から項目を取り出すことが何を意味するかを解釈し、そのバイト列の中でデータ構造がどこから始まりどこで終わるかを追跡し、そして最終的に生ポインタをデータ構造へ参照外しして、私たちが使いやすい綺麗なインターフェース(例えば my_vec[3])にしてくれます。
同様に、String はメモリ領域のバイト列を追跡し、そこに書き込まれる内容が常に有効な utf-8 であるようプログラム的に制限し、そのメモリ領域を型 &str に参照外しする手助けをします。
これらのデータ構造はどちらも、その仕事をするために生ポインタの unsafe な参照外しを使用しています。
メモリの詳細: