![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Assigned & Dispose. Что не так?
Cosinus © (2004-12-21 12:20:00)
Почему то не работает... Не подскажите, почему?
if Assigned(Add_lb.Items.Objects[Add_lb.Items.Count-1]) then
Dispose(Add_lb.Items.Objects[Add_lb.Items.Count-1]);
icWasya (2004-12-21 15:12:00) [1]правильный код такой
Add_lb.Items.Objects[Add_lb.Items.Count-1].Free;
Add_lb.Items.Objects[Add_lb.Items.Count-1]:=Nil;
PVOzerski (2004-12-21 14:13:00) [2]Лучше б ты FreeAndNil сделал...
Cosinus (2004-12-21 13:15:00) [3]I>
> begin...end © (21.12.04 12:26) [2]
Да, это ListBox.
> Суслик © (21.12.04 12:42) [3]
Да, я хотел избежать утечек памяти. В итоге сделал так...
if Assigned(Add_lb.Items.Objects[Add_lb.Items.Count-1]) then
Add_lb.Items.Objects[Add_lb.Items.Count-1].Free;
Всем спасибо.
Суслик (2004-12-21 12:42:00) [4]
> Почему то не работает... Не подскажите, почему?
А что должно быть?
Если имеется в виду освобождения памяти, то нужно делать так
dispose(PYouType(Obj)), т.к. приводить к типу данных, на который указывает указатель
begin...end (2004-12-21 12:26:00) [5]> Cosinus © (21.12.04 12:20)
Add_lb - это ListBox ?
Объекты уничтожаются с помощью деструктора, метода Free или процедуры FreeAndNIL.
PVOzerski (2004-12-21 12:25:00) [6]1) кабы знать еще тип Add_lb.Items.Objects[Add_lb.Items.Count-1]...
2) В любом случае: dispose неделает значения указателя на высвобожденную область памяти равным nil, а assigned именно на равность nil и проверяет. Отсюда делай вывод.