Я собираюсь объяснить это как можно проще, если я не отвечаю на ваш вопрос, я прошу прощения.
Когда вы действительно получите ответ на этот вопрос, это ваш первый шаг к реальному мышлению Объектно-ориентированного.
В ОО, когда два объекта оба "имеют" другой объект, вполне допустимо, чтобы оба ссылались на этот другой объект. Уловка с ОО состоит в том, что у объектов есть собственная жизнь, они текучие, и любой, кто нуждается в них, может сохранить ссылку на них. Объект должен сохранять себя «Действительным» и поддерживать стабильность при использовании многими другими объектами. (Вот почему неизменяемые объекты, такие как String, так хороши, они ВСЕГДА действительны, как и во время их создания)
Единственное исключение - если вы кодируете в C ++, потому что тогда вам действительно нужно вручную освобождать объекты, что подразумевает владельца, который может отслеживать жизненный цикл каждого объекта - что делает действительно очень трудным «думать» в ОО в С ++.
[Дополнение] Поскольку вы имеете в виду указатели, я думаю, что вы программируете на C ++, что отличается. В этом случае вы правы. Сделайте одного менеджера "своим" для жизненного цикла вашего общего объекта. Он не должен позволить этому объекту умереть, пока все другие ссылки не исчезнут.
Вы также можете использовать подсчет ссылок. Всякий раз, когда кто-то получает ссылку на ваш объект, он вызывает «addReference» или что-то еще, когда это делается, он удаляет ссылку. Если кто-то вызывает removeReference, когда счетчик равен 1, объект может очиститься. Это, вероятно, настолько близко, насколько вы можете прийти к истинному распределению / освобождению в ОО-стиле в C ++. Это очень подвержено ошибкам.
Я полагаю, что есть библиотеки для таких вещей.