*演算子(Dereference)とスマートポインター
- 参照型につかうと、参照外しされる。
- スマートポインター(Deref実装型)に使うと、Deref型強制される。
メモ
pub trait Dref { type Target: ?Sized; fn deref(&self) -> &Self::Target; }
不可変参照外し演算子(*v)によって使用される。
*演算子による明示的な参照外し演算子だけでなく、コンパイラによって暗黙的に使用される。 このメカニズムは、Deref型強制と呼ばれる。
Derefは、スマートポインターにのみ実装される。
Deref型強制
型Tが、Deref<Target = U>
を実装し、xがTの値とした時、
*x
は*Deref::deref(&x)
と同一 - derefメソッドが呼ばれ、参照が外される&T
は、&U
型に強制される- Tは暗黙的に型Uのメソッドを実装する