Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

добавление/удаление в/из TList


LDV ©   (2012-02-15 14:47:00) 

Нужен ли Dispose перед освобождением списка и правильно ли я сохраняю указаетли в список?


function Tform_YMLFields.CanExecuteService: Boolean;
var
 FoundDuplicateName: Boolean;
 CountryOfOriginYMLField, ManufacturerWarrantyYMLField, AdultYMLField: PArray;
 I: Integer;
 ListOfDuplicateFields: TList;
begin
 ListOfDuplicateFields := TList.Create;
 try
   CountryOfOriginYMLField :=
     CheckingCountryOfOriginYMLField(FoundDuplicateName);
   if FoundDuplicateName then
   begin
     {  }
     Assert(CountryOfOriginYMLField <> nil);
     {  }
     ListOfDuplicateFields.Add(CountryOfOriginYMLField); // <- ???
   end;
   ManufacturerWarrantyYMLField :=
     CheckingManufacturerWarrantyYMLField(FoundDuplicateName);
   if FoundDuplicateName then
   begin
     {  }
     Assert(ManufacturerWarrantyYMLField <> nil);
     {  }
     ListOfDuplicateFields.Add(ManufacturerWarrantyYMLField); // <- ???
   end;
   AdultYMLField := CheckingAdultYMLField(FoundDuplicateName);
   if FoundDuplicateName then
   begin
     {  }
     Assert(AdultYMLField <> nil);
     {  }
     ListOfDuplicateFields.Add(AdultYMLField); // <- ???
   end;
 finally
   for I := 0 to ListOfDuplicateFields.Count do
     Dispose(PArray(ListOfDuplicateFields[I])); // <- ???
   ListOfDuplicateFields.Free;
 end;
 Result := True;
end;


begin...end   (2012-02-15 18:19:00) [1]

> Нужен ли Dispose перед освобождением списка

Неизвестно. Какие указатели возвращают функции CheckXXXField? Если это ссылки на области памяти, динамически выделенные (процедурой New) внутри этих функций, значит, память освобождать нужно. Но в таком цикле:

for I := 0 to ListOfDuplicateFields.Count - 1do

Если же эти функции возвращают указатели на какие-то уже имеющиеся статические структуры, значит, освобождать не надо (потому что Вы ничего динамически и не выделяли).

> правильно ли я сохраняю указаетли в список?

Да.


Наверх

Титульная страница Поиск, карта сайта Написать письмо