![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление объекта [D5]
Серж © (2001-12-18 19:18:00)Удаляю объект (делаю Free)
Как проверить что объект удален (проверяю на nil - говорит,
что указатель определен). Как быть ???
Anatoly Podgoretsky (2001-12-18 20:25:00) [1]В принципе не важно как сделать, важно что бы любой объект добавлялся и удалялся самиз списка. В этом случае проблема уйдет на корню.
Серж (2001-12-18 19:57:00) [2]>Юрий Зотов
Хитро! Ладно, завтра попробую! Спасибо!
Юрий Зотов (2001-12-18 19:52:00) [3]Надо же, разница в 2 секунды...
Теперь задача понятна. Один из способов такой. Породите свой менеджер от TComponent, а Ваш TList вставьте в него, как поле. Разница в том, что при вставке любого компонента в отчет этот TComponent может вызвать его метод FreeNotification и поэтому автоматически будет получать все уведомления об удалении. Остается только заместить его метод Notification, а в нем уже очищать ссылки в TList.
Серж (2001-12-18 19:48:00) [4]Ну ладно!! Спасибо всем!
Если даже Ю.Зотов не знает способа - значит буду пытаться решить проблему другим и, похоже, более длинным путем :((
Еще раз спасибо за внимание.
Юрий Зотов (2001-12-18 19:43:00) [5]А зачем вообще проверять? Если Free было вызвано и при этом исключений не возникло, значит объект удален и никакие проверки уже не нужны.
Похоже, Anatoly Podgoretsky прав - логика кода построена не лучшим образом. Советую обратить на это внимание, поскольку очень часто такие вещи являются причиной скрытых и труднообнаруживаемых ошибок.
Серж (2001-12-18 19:41:00) [6]Ну это не совсем "повторное использование"
Проблема в следующем:
Я делаю дизайнер отчетов. Пользователь может добавлять к репорту разные элементы (bandы, lablы и т.д.). То что лежит на отчете пишется в tlist
Конечно, можно удалять и добавлять компоненты.
Проблема появилась, когда удаляется банд. Делаю ему free - он удаляется и удаляет свои дочерние объекты.
Мне их надо удалить из lista. Поэтому и возник вопрос. Я хотел при удалении банда проверить какие объекты удалились вместе с ним и удалить их из этого списка.
А в других случаях я и присваивал nil.
Должен же быть какой-нибудь способ???
nil (2001-12-18 19:36:00) [7]FreeAndNil(Object);
Anatoly Podgoretsky (2001-12-18 19:29:00) [8]Ну присвой ему nil после удаления.
Только зачем так делать, на лицо повторное использование, лучше писать так что бы не было в этом нужды.