Очищение объектов
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
если так использовать
try
for i:=0 to Tree.Items.Count-1 do
if Assigned(Tree.Items.Item.Data) then Tree.Items.Item.Free;
finally
Tree.Items.Clear; - тут выскакивает
try
for i:=0 to Tree.Items.Count-1 do
if Assigned(Tree.Items.Item.Data) then Tree.Items.Item.Free;
finally
Tree.Items.Clear; - тут выскакивает
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
попробуй
[syntax="delphi"]if Assigned(Tree.Items.Data) then TObject(Tree.Items.Data).Free;[/syntax]
[syntax="delphi"]if Assigned(Tree.Items.Data) then TObject(Tree.Items.Data).Free;[/syntax]
С уважением, Lost Angel...
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
LAngel,
А treeview.clear; как думаешь надо будет делать?
А treeview.clear; как думаешь надо будет делать?
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Нашел сейас думаю как избавитья
Когда добавляю так
Tree.items.Addobject(nil,'111',Data)
Data это класс с переменными
или так
Tree.items.Add(nil,'111')
то все нормалньо очищается
но если так, то ошибка
Tree.items.Addobject(nil,'111',pointer(111))
Когда добавляю так
Tree.items.Addobject(nil,'111',Data)
Data это класс с переменными
или так
Tree.items.Add(nil,'111')
то все нормалньо очищается
но если так, то ошибка
Tree.items.Addobject(nil,'111',pointer(111))
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
TObject(Items.Data).Free вызовет деструктор объекта, указатель которого "привязан" к Data итема, сам итем продолжит существовать, так что Items.Clear вызывать надо, если необходимо очистить список самих итемов." писал(а):LAngel,
А treeview.clear; как думаешь надо будет делать?
" писал(а):Tree.items.Add(nil,'111')
то все нормалньо очищается
но если так, то ошибка
Tree.items.Addobject(nil,'111',pointer(111))
Потому что, в первом случае if assigned(Items.Data) будет false, и "удаление объекта" не произойдет, а во втором, будет произведена попытка удалить некий объект по адресу (111), которого, есс-но не существует.
Если в параметр Data заносится просто информация, а не ссылки на объекты наследники TObject, тогда будет достаточно просто удалить сами итемы (Items.clear).
Если в Data заносится указатель на выделенную память - надо будет сначала освободить память FreeMemory(Items.Data).
Выбирай свой случай

С уважением, Lost Angel...
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
FreeMemory(Items.Data).
Вот тут-то и вылетает если ссылка
П.С. перевл я тут эти дервье на этот метод очищения, теперь если в одном дереве добавть данные с датой потом скопировать их в другое. Затем очистть данные в 1 дереве приведенным выше методом, то будет другая инфомрация во 2 дереве
Вот тут-то и вылетает если ссылка
П.С. перевл я тут эти дервье на этот метод очищения, теперь если в одном дереве добавть данные с датой потом скопировать их в другое. Затем очистть данные в 1 дереве приведенным выше методом, то будет другая инфомрация во 2 дереве
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
Лелик, лажа у тебя там с указателями явно
внимательно перечитываем пост 15
внимательно перечитываем пост 15

- SergeyS
- Сообщения: 196
- Зарегистрирован: 21 ноя 2006, 17:12
- Откуда: Хакасия, Абакан
- Контактная информация:
Сохраняй все свои объекты во вспомогательном списке, каждый раз, когда привязываешь указатель объекта к TTreeItem.Data добавляй этот же объект и во вспомогательный список (для начала проверяй, что его там ещё нет) и когда тебе будет нужно, то очищай только этот вспомогательный список, и будет у тебя что-то типа Garbage Collection, только без контроля связей между объектами 
