Показать сообщение отдельно
Старый 13.12.2010, 12:05   #7
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Утечка памяти из-за оставшихся "внутренних" ссылок

Вероятно, придётся.

Ещё есть понятие "паспорт объекта". Это по сути экземпляр объекта, содержащий дополнительные поля.

Например так

Type TObjectEx
  Field obj:TObject
  Global usedCount:Int
  Field bDeleted:Int
End Type
При создании нового экземпляра плюсуешь usedCount, при удалении минусуешь (если нужно знать количество экземпляров).

А при удалении присваиваешь bDeleted = true.

Далее в том месте где обрабатываешь объекты, пробегая по циклу, пишешь

for local obj:TObjectEx = eachin listObjs
  if(obj.bDeleted = true)
     listObjs.Delete(obj)
     continue
  endif

  'а тут обработка
next

А может это изврат - создавать ещё один класс - и проще в классы (type) объектов поле bDeleted дописать и всё.

Я лично вижу такой подход (наличие булевой переменной) применимым вполне, т.к. после однократного прохода по всем спискам, в которых есть ссылка на наш объект - эти ссылки удалятся, и получим то что хотим.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (13.12.2010)