Вероятно, придётся.
Ещё есть понятие "паспорт объекта". Это по сути экземпляр объекта, содержащий дополнительные поля.
Например так
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 дописать и всё.
Я лично вижу такой подход (наличие булевой переменной) применимым вполне, т.к. после однократного прохода по всем спискам, в которых есть ссылка на наш объект - эти ссылки удалятся, и получим то что хотим.