Ответ 1
Далее предполагается, что VBA по-прежнему использует тот же механизм сбора мусора, который используется в VB6 (что, скорее всего, и делает).
VB6 использовал GC подсчета ссылок. GC инициируется детерминированным образом, когда последняя ссылка на данный объект установлена на Nothing
. Установка локальных ссылок на Nothing
не требуется, это происходит по мере того, как они выходят за рамки.
Каждый объект реализует COM-интерфейс, который заботится о счетчике ссылок для этого объекта. Каждое присваивание ссылки на объект обновляет контрольные счетчики задействованных ссылок (то есть счетчик старого объекта, который ранее ссылался, уменьшается, а счетчик новых объектов увеличивается). Объектом является сбор мусора, когда его счетчик ссылок достигает 0.
Таким образом, объекты в циклических ссылках никогда не собираются в течение всего жизненного цикла приложения VBA. Более того, VBA не предлагает способ разбить круговые ссылки. В VB6 слабые ссылки могут быть реализованы с помощью функций WinAPI.