zub, кончай уже его кормить.
Предлагаю свой вариант:
1. Базовый класс делать со счётчиком ссылок, как TInterfacedObject
2. У объекта есть флаг "я труп".
3. При удалении из структуры, не вызывать деструктор, а ставить флаги "я изменился" и "я труп" и присваивать nil
4. Каждый вторичный содержатель (вьюпорт, дерево и т.п.) при каждом тыке к объекту проверяет: это труп? Тогда вместо запланированной операции с ним (сообщение, отрисовка) удалить его из себя. Таким образом, экземпляр класса реально удалится когда все вьюпорты и прочие проснутся и обнаружат, что он труп.
5. Каждый отрисовщик пробегает по флагам "я изменился" входящих в него объектов при клике мышью или лениво, скажем, 10 раз в секунду.
З.Ы. Все эти паттерны, MVC - они для работы командой. Одиночке они только добавляют два кило ненужного оверхеда.