Если у вас возникли проблемы с определением правильного способа (места, порядка и т. Д.) Уничтожения стандартных объектов в программе на Delphi, то использование объектов или интерфейсов с подсчетом ссылок не поможет вам вообще.
Я понимаю, что вы хотите, чтобы узлы на графике сохраняли ссылки друг на друга, и когда не осталось ссылок на объект, он должен быть уничтожен автоматически. Но учтите тот факт, что каждый из двух узлов может иметь ссылку на другой узел, и количество ссылок никогда не достигнет 0 снова, поэтому эти объекты никогда не будут освобождены. Вам нужно будет разорвать хотя бы одну из ссылок / зависимостей вручную. И если вам все равно придется это делать, то вы можете вообще пропустить подсчет ссылок. Для получения дополнительной информации см. Статью в Википедии о слабых ссылках . Интерфейсы могут использоваться в Delphi для подсчета ссылок, но слабые ссылки могут поддерживаться только при умном приведении типов. Для примера см. этот исходный код и его комментарии .
Одна идея, которую вы, возможно, захотите изучить, - это сохранить стандартное управление временем жизни ваших объектов и позволить графическим объектам отслеживать зависимости.
Пусть у каждого графического объекта есть список других объектов, с которыми он связан. Теперь вы можете просто освободить любой из объектов, и служебный код для списка удалит все ссылки на уничтожаемый объект из всех других объектов. Если вы хотите изменить график, вы просто освобождаете узлы, которые хотите удалить, и зависимости будут обновлены. Если вы хотите уничтожить весь граф, просто уничтожьте все узлы. В основном у вас есть список узлов (владение, управление временем жизни) и другая структура данных для описания графа.