Есть несколько вопросов по структурам и типам в целом. Вроде и начитался везде всего что мог, но бардак в голове только сильнее стал (особенно от других языков программирования), а хотелось бы систематизировать это все.
Вот тестовый код:
- Код: Выделить всё
type
TFMfn = array[0..9] of char;
TFMdatetime = array[0..4] of byte;
TFMFactoryNumber = packed record
lfn: TFMfn;
ldatetime: TFMdatetime;
lcrc: word;
end;
PFMFactoryNumber = ^TFMFactoryNumber;
TFMres = packed record
lfrom: word;
ldate: TFMdate;
lcrc: word;
end;
PFMres = ^TFMres;
TFMv4 = packed record
FactNum: TFMFactoryNumber;
Res: array of TFMres;
end;
PFMv4 = ^TFMv4;
function IntToFMdatetime(day, month, year, hour, minute: byte): TFMdatetime;
begin
Result[0]:=day;
Result[1]:=month;
Result[2]:=year;
Result[3]:=hour;
Result[4]:=minute;
end;
procedure FMcopy( );
var
fm1,fm2: TFMv4;
begin
fm1.FactNum.lfn:='1234567890';
fm1.FactNum.ldatetime := IntToFMdatetime(0,1,2,3,4);
SetLength(fm1.Res,2);
fm1.Res[0].lfrom:=11;
fm1.Res[1].lfrom:=22;
fm2.Res := Copy(fm1.Res);
fm2.FactNum.lfn:='2224567890';
fm2.FactNum.ldatetime := IntToFMdatetime(9,2,7,3,4);
fm2.Res[0].lfrom:=111;
end;
begin
FMcopy();
end.
И немножко вопросов:
- Я так понимаю TFMFactoryNumber и TFMres содержат в себе только типы-значения и память переменным выделяется/освобождается автоматически при попадании/покидании области видимости.
- TFMv4 содержит в себе тип-значение TFMFactoryNumber и ссылочный "тип" array of TFMres. Память под FactNum выделяется автоматически, а под Res изначально не выделяется и ее необходимо выделить вручную через SetLengh.
- Вопрос по функции Copy(fm1.Res). Я нашел только описание с тремя параметрами Function Copy(A : DynArrayType; Index,Count : Integer) : DynArray;, как она работает только с одним?
- Вопрос по ресурсам. fm1.Res и fm2.Res фактически указатели на динамические массивы (или я не ошибаюсь?), при покидании области видимости процедуры FMcopy, уничтожатся ли самостоятельно динамические массивы Res вместе с fm1 и fm2?