Не ясно, спрашиваете ли вы:
- Почему Borland не сделал этого, когда они изначально разработали Delphi?
- Почему бы Embarcadero не сделать это в будущей версии Delphi?
- Почему бы мне не сделать это с моими собственными типами пользовательских данных?
Разве это не значит, что теперь все подсчитано?
Да, будет.
Однако вы не обязательно хотите, чтобы все было пересчитано: каждое маленькое целое число, каждая строка, каждый логический элемент, каждый элемент в массиве ... если нет другой причины, по которой реализация подсчета ссылок добавляет некоторые накладные расходы, например, немного дополнительной памяти на объект, возможно, незначительной для крупных объектов, но пропорционально более значимой, если применять ее к каждому крошечному объекту.
Также см. Также Сборщик мусора для объектов и компонентов Delphi , в котором говорится (цитата),
Delphi предоставляет три способа управления объектами:
- Создание / уничтожение объектов с помощью try..finally.
- Использовать потомков TComponent - создайте компонент и дайте его владельцу освободить его.
- Интерфейсы - когда счетчик ссылок для интерфейса становится равным 0,
объект, который реализует это
уничтожены.
В справке Delphi сказано, что не стоит смешивать
подход владельца TComponent с
интерфейс управления памятью, но ...
Это будет сборка мусора?
Не совсем; простой подсчет ссылок не так надежен, как сборка мусора:
При подсчете ссылок, если у вас есть два экземпляра с подсчетом ссылок, каждый из которых содержит ссылку на другой, они не освобождаются автоматически. Чтобы освободить их, вам нужно будет разорвать эту «циклическую ссылку» (т. Е. Явным образом попросить одного из них освободить ссылку на другого).
При истинной сборке мусора сборщик мусора заметит, что на эти два экземпляра не ссылаются откуда-либо еще, и освободит их обоих.
Обновление
Если вы аннотируете свои потенциально циклические ссылки как [weak]
ссылки, то они будут уничтожены нормально. Но до Delphi 10.1 Berlin это работает только в компиляторах NexGen (то есть тех, которые используют LLVM под капотом). Начиная с 10.1 Берлина эти [weak]
ссылки работают везде.