次のようにすると Box
は Box
の中身をムーブすることができます。
rust
1struct S; 2let s = Box::new(S); 3*s; // OK
この Box
のような型を作ろうと考えたとします。 *
は Deref
トレイトによってオーバーロードできるので次のようになるはずです。
rust
1struct S; 2struct U(S); 3impl std::ops::Deref for U { 4 type Target = S; 5 fn deref(&self) -> &S { 6 &self.0 7 } 8} 9let s = U(S); 10*s; // Error: cannot move out of borrowed content
しかし、借用した値をムーブできない旨のエラーがでます。それは確かに Deref
は &self
を取っているので分かるのですが、これは Box
でも同様なはずです。
なぜ Box
では中身をムーブすることができるのですか?特別扱いなのでしょうか。
また、こういう型をユーザー定義することはできるのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/27 03:22