Я решил добавить метод set в класс массива [] (ValueArray) и столкнулся с такой проблемой. Метод set - это метод класса, следовательно я должен выбрать объект-массив. Но при этом я должен указать ему индекс элемента, который нужно изменить. То есть нужно переделать адресацию объектов.
При этом адрес должен превратиться в указатель. Вот эта область памяти, и я хочу записать туда значение. Но сделать я этого не могу из-за неверно выбранного формата хранения данных. То есть это тоже нужно переделать.
ОК, придётся переделать. Не хотелось мне работать с указателями, но в данном случае без них просто не обойтись. Поэтому я придумал следующий способ работы с ними.
Когда программа запрашивает у класса стека адрес объекта, он возвращает не просто сишный указатель, а объект, хранящий указатель и признак валидности. Адрес этого объекта записывается с массив, и при удалении объекта, на который указатель ссылается, класс стека просто изменит флаг валидности, сообщив программе, что данный указатель больше не валиден.
Дело в том, что опыт использования таблицы подсчёта ссылок показал, что программа не может это всё контроллировать, поскольку за это отвечает код пользователя. И в результате вполне могут возникать ситуации, когда объект уже удалён, а указатели ещё нет. И они просто стали невалидными, но программа не может это отследить.
Я спросил: а что заставляет меня использовать именно сишные указатели? Пусть указатели станут умными - с признаком валидности.
Но я пока в раздумьях. Ведь если указатель стал невалиден, значит есть ошибка в коде пользователя. Как сообщить пользователю, что он удалил не тот объект, который стоило удалять, если сам объект уже удалён? Как он поймёт, о каком объекте идёт речь?
В принципе можно было бы вообще не разрешить пользователю изменять объекты в массиве. Просто создать видоизменённую копию массива, а затем через метод set заменить оригинальный массив копией. Но этот способ хотя и логически верен, на практике приведёт к жутким тормозам и непомерным требованиям к памяти.



![Вызов методов класса [] (ValueArray)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt9CS4TLRiW0P2GxvppSmeXi4BcmkjKqMfywwNgsUgrQBoeaCRc319RclQV-oczVsviTJR9Cnb0tY1IqEiQ_laNb4jvjHbk7pSAq7C1skuz_EgD3IDOOWrsFZ29qVyqoy-MetTus7yvEU9/w400-h258/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA+%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0+2021-02-23+%25D0%25B2+23.37.01.png)







![Создание массива типа [Boolean] с добавлением элемента](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWmwUWvbTiPNAQ5Np6Wz8Fz3zPSvk-04ZNkt4UvDAEWm6nvfsPVkeBjhlFhDE-tW30BloxPKV0cd4D7NH2R_MQko0Awk_TkSexqbyEBdY_j1bYS-xmU4JHsU7c0SdlLREEFnUZkx7JL9K7/w400-h258/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA+%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0+2021-02-17+%25D0%25B2+06.53.05.png)



![Создание массива типа [Boolean] и добавление значения в него](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH2wXSR-g5H8iNwDuspQVAzaQ_S0m5jFCWPfeeGNg_xs81FvO6ba3v5k8M6GKakGgTWF-OwpA1Z7WSWAfz33vW4JEOj9PJDxoqU3U3bePQhzxVBD_m35VQ6EMatxzO6HDA04f8IIXBNUN8/w400-h258/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA+%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0+2021-02-11+%25D0%25B2+15.49.35.png)
![Добавление значений в массив типа [Boolean]](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhalnT34i1pmyTWfAk7B6S7FW6ise3HrSmQuuW8jF1Qwc_YKXfgmGP6BPFUv6lezgMDqY14evD_CISE2OK-mlu6PBSI5domWG8LcqsE2yzRmn537_LCRsPZDj4Ju4SMfy_cVEfjDNxyYO67/w400-h258/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA+%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0+2021-02-11+%25D0%25B2+17.24.17.png)

![Создание массива типа [Boolean]](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha7YjyXw77AFcU-3p_GcYN9C-fvFp8KwLMJypch136fHsefmmMnPq6dnVRK23vVThGOp4WTw0nQa1fU52ORAMMlUTlMU5IpaIsnERCJL5fwAPTIiQmyx4gpNqGkQGWcJFr77mKT5NHcjQv/w400-h258/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA+%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0+2021-02-10+%25D0%25B2+15.20.22.png)









