部分的ムーブ
1つの変数の デストラクト の中で、 ムーブ
と 参照
の両方のパターンバインディングを同時に使用することができます。両方を使用すると、変数の一部がムーブされ、他の部分が参照として残るという変数の部分的ムーブが発生した状態になります。変数の部分的ムーブが発生すると親変数はその後使用できませんが、参照されているだけの部分(ムーブされていない部分)は使用することができます。
この例では、age
変数をヒープ上に保持し、部分的ムーブを説明しています。
上記コードでref
を削除すると、person.age
の所有権がage
変数にムーブされるため、エラーになります。
もしもPerson.age
がスタック上に保持されていたら、
age
の定義がperson.age
をムーブすることなくデータをコピーするので、
ref
は必須ではないのですが、実際にはヒープ上に保持されているためref
は必須です。