Подсчет ссылок VBA -Разрушение объекта

Недавно я столкнулся с вопросом, который заставил меня задуматься; это занимало меня, и я не мог найти понятного объяснения этому в сети.
Это связано с уничтожением объектов Excel (, которые я использую постоянно и никогда по-настоящему не подвергал сомнению раньше ).

Предыстория моего вопроса:
С обычными объектами вы можете создать экземпляр объекта, используя ключевые слова SET и NEW. Например:

Set classInstance = New className

Всякий раз, когда мы создаем экземпляр таким образом, объект создается в куче памяти, а счетчик ссылок увеличивается на 1.
Если я не добавлю больше ссылок, следующий оператор вернет счетчик ссылок к нулю:

Set classInstance = Nothing 

Когда счетчик ссылок становится равным 0, объект уничтожается и очищается из памяти, а «classInstance» указывает на.

Что я читал:
Когда мы используем функцию CREATEOBJECT, она возвращает ссылку на COM-объект.

Set oApp = CreateObject("Excel.Application")

Хотя мы могли бы сказать:

Set oApp = nothing 

Счетчик ссылок на объекты станет равным 0, и oApp больше не будет указывать на объект.

Мои вопросы:
1 )Почему этот тип объекта требует вызова метода.Quit до фактического удаления объекта из памяти?
То же самое происходит при добавлении ссылки на объект рабочей книги (workbooks.add или workbook.open ), для которых требуется метод.close. Почему эти объекты не могут быть автоматически уничтожены при обнулении счетчика ссылок?
Так обстоит дело, когда мы говорим, например,:

set oRange = nothing 

2 )И нужно ли говорить:

oApp.Quit
set oApp = nothing 

Поскольку объект Application уже очищен из памяти при применении.Quit, больше нет объекта, который нужно освободить.
Единственная причина, по которой я мог придумать, почему oApp будет установлено в Nothing после выхода, заключается в том, что он может указывать на неиспользуемую ячейку памяти (в куче )и может привести к путанице позже, если эта память будет быть повторно -назначено (, хотя в VBA мне трудно представить это ). Я задавался вопросом, верен ли этот вывод, и хотел бы получить подтверждение этого от того, кто знает ответ.
Пожалуйста, скажите мне, если я вижу это неправильно.

3 )То, что в VBA называется «ссылкой на объект» (, например, oApp в приведенном выше коде ), в C я рассматриваю как переменные-указатели. Было бы безопасно использовать это утверждение или, опять же, я неправильно это понимаю?

Вообще не сложно применить. Выйти и ничего не ставить, но было бы неплохо получить какую-то точную информацию по теме. Чтобы я на 100% процентов знал, зачем я это делаю.

23
задан Community 9 July 2018 в 19:34
поделиться