Признаться, после публикации статьи (а это моя статья, если кто не понял) я ожидал сразу бурного обсуждения, но две недели вообще ничего не было. Наконец, вроде, заметили, но обсуждение мгновенно свалилось с обсуждения предлагаемого МЕТОДА на обсуждение общих ПРОБЛЕМ , связанных с как их тут обозвали "расшаренными" ссылками.
Мне же, как автору, интересно две вещи.
1) Встречал ли кто-нибудь такой метод (назовем его использование косвенных ссылок) где-нибудь еще? Все эти умные указатели и разные фичи ничего общего не имеют с предложенным методом.
2) Какие проблемы видятся при использовании предложенного метода?
Дополнительно поясняю :
1) Указанный метод преследует единственную цель - чтобы попытка использовать уже освобожденный объект гарантировано вело к возникновению ошибки. Никакой автоматизации здесь не предусмотрено.
2) Поскольку используются тривиальные вещи, то их можно применять в любых средах, где есть такая проблема (отсутствие ошибки при обращении к освобожденному объекту). В том числе в С++.
3) В методе не используются интерфейсы, и, вообще, не требуется переделка классов. Все остается как было, меняются только ссылки на объекты.
4) Новые х-ссылки можно безбоязненно размножать и хранить в контейнерах. Если кто-то удалит объект, все ссылки станут недействительными. Правда, классы-контейнеры, вероятно, потребуют модификации (FreeAndNil(Items[i]^) и тому подобное)
5) Использование промежуточного менеджера ссылок также открывает новые возможности. Можно проверить не пытаемся ли мы освободить нил-указатель .
6) Возможно использование х-ссылок для подмены объекта
- Код: Выделить всё
FreeAndNil(xSample^);
xSample^ := TSample.Create;
и в результате все раннее созданные ссылки (включая "контейнерные") будут указывать на новый экземпляр объекта.