この記事は、Rust ドキュメントでの「移動」という用語の使用が、コピーを意味するのではなく、コンパイル時の所有権の譲渡を意味する可能性を暗示しているようです。具体的には、この引用を参照してください。
コンパイラは、所有者が 1 人だけであることを強制します。ポインターを新しい場所に割り当てると、所有権が譲渡されます (略して移動と呼ばれます)。このプログラムを考えてみましょう:
これは正しいです?所有権の譲渡/移動は実行時に実際にコピーするのではなく、コンパイル時の抽象化にすぎません。
memcpy
いいえ、必ずしもデータ構造全体のコピーではありませんが、移動は依然として ( の意味で) コピーです。ただし、リストしたコンパイル時のセマンティクスがあります。あれは、
let a = ~[1,2,3];
let b = a; // copies one word (the pointer), "moves" the data.
let c = b.clone(); // copies the data too.
( Copy が削除され、より強力で柔軟な に置き換えられたため、b.clone()
ではなくを使用したことに注意してください。)copy b
Clone
Rust の (多くの) 変数はメモリの明確なチャンク (C/C++ の変数と同様) であり、何かが特定の値を持っている場合、その値は適切な場所のメモリにある必要があるため、このコピー動作が発生する必要があります。これは、移動 (通常、ある変数から別の変数へのデータ転送を伴う) では、実際にコピーを実行する必要があることを意味します。