Вы пытаетесь отслеживать, кто ссылается на объект, чтобы вы могли очистить эти ссылки, когда объект уничтожен, или вы пытаетесь отслеживать, когда безопасно уничтожить объект?
Если последнее, то звучит так, будто вы ищете сборщика мусора. Я никогда не имел дела с Delphi, поэтому я не знаю, есть ли для него GC, которые можно использовать, но я бы удивился, если бы их не было.
Если первый, то GC, вероятно, не поможет. Если Delphi поддерживает ООП / наследование (честно говоря, я не знаю, так ли это), вы можете сделать что-то вроде этого (псевдокод):
// Anything that will use one of your tracked objects implements this interface
interface ITrackedObjectUser {
public void objectDestroyed(TrackedObject o);
}
// All objects you want to track extends this class
class TrackedObject {
private List<ITrackedObjectUser> users;
public void registerRef(ITrackedObjectUser u) {
users.add(u);
}
public void destroy() {
foreach(ITrackedObjectUser u in users) {
u.objectDestroyed(this);
}
}
}
По сути, всякий раз, когда вы добавляете один из отслеживаемых объектов в коллекцию, эта коллекция регистрируется в этом объекте. Когда объект уничтожается (я полагаю, что вы вызовете destroy () в деструкторе объекта), тогда объект сообщает коллекции, что он уничтожается, поэтому коллекция может делать все, что ей нужно.
К сожалению, это не очень хорошее решение, если вы хотите использовать встроенные коллекции. Вы должны написать свои собственные объекты коллекции (они могут просто обернуть встроенные объекты). И для этого потребуется убедиться, что вы регистрируетесь везде, где хотите отслеживать объект. Это не то, что я бы назвал «счастливым» решением, хотя для небольших проектов это, вероятно, не было бы слишком плохо. Я в основном надеюсь, что эта идея поможет породить другие идеи. :)