Я разработал и реализовал эту функцию в VBScript.
Большинство ответов в моих статьях помечают ссылки, но только для пояснения:
в каком порядке будет вызываться Class_Terminate?
Обычно терминаторы вызываются сразу после освобождения последней ссылки на объект.Тем не менее, из-за циклических ссылок и других проблем, как правило, очень плохая идея полагаться на детерминистический порядок завершения.
Краткий осмотр подсказывает в этом порядке (не наоборот)порядок!) сотворения, но гарантируется ли это?
Как я уже отмечал в своих статьях, незавершенные объекты завершаются при выключении двигателя.В качестве детали реализации очередь завершения выполняется в том порядке, в котором были созданы объекты. Однако это недокументированная деталь реализации, на которую не следует полагаться.
Имеет ли значение тип объекта?например, если у меня есть классы, реализованные в .VBS, смешанные с другими COM-объектами, такими как Scripting.FileSystemObject.
Может.Могут быть циклические ссылки между этими объектами, которые разрушаются в непредсказуемое время.
Я думаю об объектах в глобальной области видимости, когда программа завершает работу - отличается ли она для объектов, например, из области видимости функции?
Я не понимаю вопроса.Не могли бы вы уточнить?
Зависит ли это от нормального выхода, по исключению или через WScript.Quit?(В последнем случае кажется, что Class_Terminate по-прежнему вызывается для любых незавершенных объектов перед выходом, однако это может привести к сообщению об ошибке).
Это может иметь значение, да. VBScript не дает никаких гарантий того, что терминаторы всегда работают. Хост, которому принадлежит движок, может завершить свой процесс, например, «быстро провалившись» таким образом, который не гарантирует чистого выключения двигателя, например.(В случае катастрофического сбоя это иногда желательно; если вы не знаете, что не так, то иногда выполнение кода завершения усугубляет проблему, а не улучшает ее.)
Хост сценариев Windows пытается завершить работуЧистый останов двигателя при вызове Quit.
Когда уничтожается объект WScript?
Когда запускается логика завершения процесса Windows Script Host.
Имеет ли значение хост скрипта?(wscript.exe против cscript.exe и как бы не назывался механизм веб-хоста)
Да, это может иметь значение.
Отличается ли модель разрушения объектов JScript от VBScript?
Да, очень сильно.
JScript "Classic" периода, когда я работал над ним (до 2001 года), использует недетерминированный сборщик мусора с разметкой и уборкой, который обрабатывает циклические ссылки между объектами сценария, но НЕ обрабатывает циклические ссылки между сценарием иобъекты браузера.Более поздние версии JScript «Classic» имеют модифицированный сборщик мусора, который ДОЛЖЕН обрабатывать циклические ссылки между объектами скрипта и браузера (хотя он не обязательно обнаруживает округлости, касающиеся объектов JScript и сторонних объектов ActiveX.)
IE 9версия JScript имеет полностью переписанный сборщик мусора, использующий совершенно разные технологии;Я немного поболтал с его дизайнером, но у меня недостаточно технических знаний, чтобы подробно обсудить его характеристики.
JScript .NET, конечно, использует сборщик мусора CLR.
Могу я спросить, почему вы заботитесь обо всем этом?
Также обратите внимание, что я не смотрел этот код более десяти лет;принять все это с соответствующим уровнем скептицизма.Моя память может быть повреждена.