![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
добавление/удаление в/из 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
Если же эти функции возвращают указатели на какие-то уже имеющиеся статические структуры, значит, освобождать не надо (потому что Вы ничего динамически и не выделяли).
> правильно ли я сохраняю указаетли в список?
Да.