Изменение механики поставляемых типов #77
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
То, что не изменяется не должно копироваться. Значение каждого из встроенных в данное решение типов, по умолчанию передается по ссылке и не вызывает копирование значения, увеличивая счетчик ссылок.
В случае, если производится какое-либо действие над объектом, -- счетчик ссылок уменьшается и производится поверхностная копия контейнера, увеличивая счетчик ссылок всех вложенных объектов первого уровня.
Подобная механика должна иметь возможность расширения пользовательскими типами
Ответственность за отложенное копирование пользовательских типов лежит на пользователе и не обрабатывается особым образом на уровне поставляемого решения.
Решение гарантирует, что будут осуществлены вызовы методов, зарегистрированных для каждого из пользовательских типов (включая инициализацию копированием и высвобождение памяти, при копировании контейнеров и высвобождении ресурсов контейнеров, соответственно)
Вопросы связанные со сравнением более не должны требовать рекурсивной педантичной проверки каждого вложенного элемента на идентичность, достаточно узнать ссылаются ли эти (вложенные) элементы на один и тот же блок памяти. Неизбежным следствием подобного станет потеря точности сравнения в случае параллельного существования полностью идентичных объектов.
Для сохранения возможности предыдущей логики поведения (с последовательной проверкой каждого вложенного элемента на идентичность), можно предусмотреть специальный флаг компиляции