Delphiの配列のコピーは、CopyMemoryを使うのが一番良い
Delphi では、配列のコピーには CopyMemory 関数を利用できます。CopyMemory 関数は、Windows ユニットにあり、あるメモリ領域のデータを別のメモリ領域にコピーするためのものです。以下のコード例をご覧ください。
uses
Windows;
procedure ArrayCopy(const Source: array of Integer; var Dest: array of Integer);
begin
if Length(Source) <> Length(Dest) then
Exit;
CopyMemory(@Dest[0], @Source[0], Length(Source) * SizeOf(Integer));
end;
var
SourceArray: array[0..4] of Integer = (1, 2, 3, 4, 5);
DestArray: array[0..4] of Integer;
begin
ArrayCopy(SourceArray, DestArray);
end.
ArrayCopyの処理ではSourceArrayの内容をDestArrayにコピーする。はじめに、Length関数で両方の配列の長さを比較し、等しくない場合はこれ以上進まず抜ける。次にCopyMemory関数を用いてSourceArrayのデータをDestArrayにコピーする。
この CopyMemory 関数はメモリを下層からコピーすることで動作しており、メモリオーバーランや境界外アクセスといった問題が発生する場合がある点は注意が必要です。従って、CopyMemory 関数を使う際には、必ず、元の配列とコピー先の配列の長さが同じであり、配列境界に気を配る必要があります。