Показать сообщение отдельно
  #19  
Старый 01.12.2012, 06:11
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от 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 и т.п. Одно из двух - а как же иначе?
Ответить с цитированием