Копировать на запись для массива записей
Применяется ли семантика копирования при записи для динамических массивов записей?
Как правильно дублировать массив записей?
Достаточно ли этого?:
type
recordA = Record
Y:integer;
end;
var x: array of recordA;
b: array of recordA;
item: recordA;
begin
SetLength(x, 2);
item.Y:= 2;
x[0] := item;
item.Y:= 5;
x[1] := item;
//Copying
b:= x;
После завершения копирования мне нужно будет сбросить первый массив:
SetLength(x, 0);
Могу ли я сделать это таким образом?
1 ответ:
Динамические массивы не поддерживают семантику копирования при записи (CoW). Это не имеет значения в вашем примере, но это имеет значение в других случаях.
Если вам нужно скопировать содержимое динамического массива, используйте функцию
Copy
. Вот пример, демонстрирующий разницу между назначением динамического массива и копированием:procedure TestCopy; type recordA = Record Y:integer; end; arrayA = array of recordA; var x, b, c: arrayA; item: recordA; begin SetLength(x, 2); item.Y:= 2; x[0] := item; item.Y:= 5; x[1] := item; b:= x; x[0].Y:= 4; Writeln(b[0].Y, ' -- ', x[0].Y); b:= Copy(x); x[0].Y:= 8; Writeln(b[0].Y, ' -- ', x[0].Y); end;