Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.04;
Скачать: CL | DM;

Вниз

ListView и объекты   Найти похожие ветки 

 
VICTOR_   (2007-10-11 16:00) [0]

Просьба подсказать, если я создал объект и ссылку на него указал в значение Data для TListItem, будет ли он уничтожен и освобождена память при вызове FreeAndNil для TListItem?
Как корректно будет поступать в данном случае?

Пример кода
procedure TForm1.Button1Click(Sender: TObject);
var
 LItem: TListItem;
begin
 LItem := ListView1.Items.Add;
 LItem.Data := Pointer(CreateOleObject("Excel.Application"));
 LItem.Data := nil;//нужен ли данный код?
 FreeAndNil(LItem);
end;


 
Сергей М. ©   (2007-10-11 16:06) [1]


> будет ли он уничтожен и освобождена память при вызове FreeAndNil
> для TListItem?


Нет, не будет.


> Как корректно будет поступать


Обрабатывать событие TListView.OnDeletion, где и уничтожать ассоциированный с удаляемым элементом (см. параметр Item: TListItem) объект.


> LItem.Data := nil;//нужен ли данный код?


Ни в коем случае !


 
clickmaker ©   (2007-10-11 16:14) [2]


> FreeAndNil(LItem);

а это - тем более не нужно


 
VICTOR_   (2007-10-11 16:15) [3]

Спасибо!


 
VICTOR_   (2007-10-11 16:26) [4]


> > FreeAndNil(LItem);
>
> а это - тем более не нужно

Это нужно для вызова обработчика
TListView.OnDeletion
либо вызывать
ListView1.Items[0].Delete;


 
Сергей М. ©   (2007-10-11 16:33) [5]


> VICTOR_   (11.10.07 16:26) [4]


Имелось ввиду, что обnilять переменную LItem после вызова деструктора объекта, на который ссылается переменная, нет никакого резона - время жизни локальной переменной равно времени жизни подпрограммы, в которой она объявлена.

Так что либо
 LItem.Free
либо
 ListView1.Items[LItem.Index].Delete;


 
VICTOR_   (2007-10-11 16:42) [6]

Еще раз спасибо!



Страницы: 1 вся ветка

Текущий архив: 2007.11.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.021 c
15-1190313122
MASTERPROMA
2007-09-20 22:32
2007.11.04
подскажите анти-троян (inject-code)


2-1192430713
Kolan
2007-10-15 10:45
2007.11.04
Корректна ли запись PAnsiChar := @string ?


15-1191344478
ERGef
2007-10-02 21:01
2007.11.04
Случайные числа


15-1191477876
PPop
2007-10-04 10:04
2007.11.04
Проверить, с какой стороны лежит точка.


15-1191222209
AntiUser
2007-10-01 11:03
2007.11.04
Microsoft продлевает срок продажи Windows XP до 30 июня 2008 года