Цитата:
Сообщение от morebeauty
В том и фишка, что НЕ ОДИН вызов.
Код:
TStringArray = array[0..FCount-1] of string;
TRec = record
Var1:string;
Vars:TStringArray;
end;
TRecs = array of TRec;
TClass = class
private
FRecs:TRecs;
public
constructor Create(Count:integer);
end;
Для того, чтобы задать размер TStringArray, к нему придется обращаться через TRecs = array of TRec;... То есть SetLength (FRecs.[i(от 0 до B)].Vars,A); то есть SetLength будет вызвано B раз
|
И всё же я не пойму: FCount у тебя константа или не константа?
Константа это то, что жёстко задано ещё при компиляции программы. Если так, то TStringArray у тебя становится статическим массивом и не нужно никаких SetLength(FRecs.[i].Vars,A)
Если же FRecs изменяется в процессе работы программы, то это никакая не константа, из чего вытекает использование динамических массивов, SetLength и т.п.
Другими словами, если компилятор знает размер массива, то работу по распределению памяти под этот массив он берёт на себя, если же не знает, тогда придётся "вручную" SetLength, GetMem и т.п. Одно из двух - а как же иначе?