-
type TMyRecord = record MyString: string; MyDouble: Double; MyInteger: Integer; end;
TDBList = TList<TDBRec>;
procedure var vDBRec: TDBRec; begin fList.Add(vDBRec);
end;
Нужно ли дополнительно уничтожать рекорды, или достаточно вызвать fList.Free. По идее вроде не нужно?
-
Не нужно. Я честно говоря плохо себе представляю как уничтожать рекорды вообще.
-
// Kerk © (04.01.17 21:52) [1]
Например обнулять строки. Dispose вызвать.
-
Строки точно не нужно обнулять. Там магия компилятора. Вот если там какие-то указатели или классы, то вручную, да.
-
> По идее вроде не нужно?
По идее нужно посмотреть исходник и увидеть там вызов Finalize
-
> Кто б сомневался © (04.01.17 21:33)
Ты привел какой то странный код в качестве примера. Пихаешь в Tlist переменную выделенную на стеке. Ты когда ее не пихаешь в TList, то ведь не задумываешься же над уничтожением? Почему тут вдруг задумался?
-
> Ты привел какой то странный код в качестве примера. Пихаешь > в Tlist переменную выделенную на стеке
А что тут странного ? В Tlist будет помещен не адрес, а значение, а оно хоть на стеке, хоть где.
-
> Игорь Шевченко © (05.01.17 11:12) [6]
> А что тут странного ?
Я бы понял если бы у него возник вопрос с освобождением памяти под запись, если бы он пихал в List указатель на нее. Ведь выделили память мы сами, резонно поинтересоваться, не будет ли список сам очищать ее по аналогии с TObjectList.
Здесь же мы пихаем в список переменную выделенную на стеке, об очищении памяти под которую мы не заботимся специально обычно. Она будет скопирована в результате добавления в список в другую такую же, память под которую выделит сам List. Резонно предположить, раз список сам память выделил, то и сам освободит. Иначе было бы нелогично.
|