*演算子(Dereference)とスマートポインター

*演算子(Dereference演算子)は

  • 参照型につかうと、参照外しされる。
  • スマートポインター(Deref実装型)に使うと、Deref型強制される。

メモ

pub trait Dref {
    type Target: ?Sized;
    fn deref(&self) -> &Self::Target;
}

不可変参照外し演算子(*v)によって使用される。

*演算子による明示的な参照外し演算子だけでなく、コンパイラによって暗黙的に使用される。 このメカニズムは、Deref型強制と呼ばれる。

Derefは、スマートポインターにのみ実装される。

Deref型強制

型Tが、Deref<Target = U> を実装し、xがTの値とした時、

  1. *x*Deref::deref(&x)と同一 - derefメソッドが呼ばれ、参照が外される
  2. &Tは、&U型に強制される
  3. Tは暗黙的に型Uのメソッドを実装する

例1. Box<T>型 (Deref)