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