Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];




Вниз

Удаление объекта 


Серж   (2001-12-18 19:18) [0]

Удаляю объект (делаю Free)
Как проверить что объект удален (проверяю на nil - говорит,
что указатель определен). Как быть ???



Anatoly Podgoretsky   (2001-12-18 19:29) [1]

Ну присвой ему nil после удаления.
Только зачем так делать, на лицо повторное использование, лучше писать так что бы не было в этом нужды.



nil   (2001-12-18 19:36) [2]

FreeAndNil(Object);



Серж   (2001-12-18 19:41) [3]

Ну это не совсем "повторное использование"
Проблема в следующем:
Я делаю дизайнер отчетов. Пользователь может добавлять к репорту разные элементы (bandы, lablы и т.д.). То что лежит на отчете пишется в tlist
Конечно, можно удалять и добавлять компоненты.
Проблема появилась, когда удаляется банд. Делаю ему free - он удаляется и удаляет свои дочерние объекты.
Мне их надо удалить из lista. Поэтому и возник вопрос. Я хотел при удалении банда проверить какие объекты удалились вместе с ним и удалить их из этого списка.
А в других случаях я и присваивал nil.
Должен же быть какой-нибудь способ???



Юрий Зотов   (2001-12-18 19:43) [4]

А зачем вообще проверять? Если Free было вызвано и при этом исключений не возникло, значит объект удален и никакие проверки уже не нужны.

Похоже, Anatoly Podgoretsky прав - логика кода построена не лучшим образом. Советую обратить на это внимание, поскольку очень часто такие вещи являются причиной скрытых и труднообнаруживаемых ошибок.



Серж   (2001-12-18 19:48) [5]

Ну ладно!! Спасибо всем!
Если даже Ю.Зотов не знает способа - значит буду пытаться решить проблему другим и, похоже, более длинным путем :((
Еще раз спасибо за внимание.



Юрий Зотов   (2001-12-18 19:52) [6]

Надо же, разница в 2 секунды...

Теперь задача понятна. Один из способов такой. Породите свой менеджер от TComponent, а Ваш TList вставьте в него, как поле. Разница в том, что при вставке любого компонента в отчет этот TComponent может вызвать его метод FreeNotification и поэтому автоматически будет получать все уведомления об удалении. Остается только заместить его метод Notification, а в нем уже очищать ссылки в TList.



Серж   (2001-12-18 19:57) [7]

>Юрий Зотов
Хитро! Ладно, завтра попробую! Спасибо!



Anatoly Podgoretsky   (2001-12-18 20:25) [8]

В принципе не важно как сделать, важно что бы любой объект добавлялся и удалялся сам из списка. В этом случае проблема уйдет на корню.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.032 c
6-22274           Polevi                2001-10-08 10:42  2002.01.08  
А зачем нам сокеты???


1-22036           Smuggler              2001-12-18 14:01  2002.01.08  
Текстовый редактор


1-22205           Denis Proshkin        2001-12-15 12:46  2002.01.08  
QReport - много данных


1-22020           Leo^Sun               2001-12-18 07:08  2002.01.08  
TMemo


1-22098           Alexander             2001-12-19 14:58  2002.01.08  
Кто знает как вытащить виндовый редактор IP адреса или компонент какой?