Шаблон, который вы используете, просто отлично, в конце концов, этот шаблон используется во всех стандартных программах на C ++ без подсчета ссылок или других расширенных инструментов управления памятью. Единственное, что вы должны убедиться, что ваша иерархия объектов строго учитывает слабость ссылки, то есть зависимость объекта, имеющего ссылку на объект, который находится за этой ссылкой. Другими словами, вы всегда должны убедиться, что владелец ссылки удален до ссылки, и вы должны убедиться в этом вручную, поскольку вы не используете подсчет ссылок.
Это означает большую ответственность за вас, программиста, так как вы всегда должны иметь полный контроль над временем жизни ваших объектов. Совершенно легко ошибиться с вашим шаблоном, поскольку из кода, имеющего слабую ссылку, вы не можете узнать, существует ли исходный объект или он удален. Вы должны убедиться в этом с помощью шаблона проектирования.
По этой причине я не предлагаю "смешивать" два подхода, то есть иметь слабые ссылки на объект, который может быть выведен из-под контроля с помощью свойства типа retain
(когда значение свойства изменяется от вашего объекта), autorelease
или ARC
.
Был введен подсчет ссылок, чтобы снять с программиста эту ответственность и упростить написание безопасного кода. Ваш шаблон в порядке, он используется миллионами программ на C ++, но вы должны осознавать свою ответственность.