Когда эта переменная-член VB6 будет уничтожена?
-
01-07-2019 - |
Вопрос
Предположим, у меня есть класс module clsMyClass
с объектом в качестве переменной-члена.Ниже перечислены две полные реализации этого очень простого класса.
Реализация 1:
Dim oObj As New clsObject
Реализация 2:
Dim oObj As clsObject
Private Sub Class_Initialize()
Set oObj = New clsObject
End Sub
Private Sub Class_Terminate()
Set oObj = Nothing
End Sub
Есть ли какая-либо функциональная разница между этими двумя?В частности, это срок службы oObj
то же самое?
Решение
В реализации 1 экземпляр clsObject не будет создан до тех пор, пока он не будет использован.Если оно никогда не используется, то событие clsObject.Class_Initialize никогда не сработает.
В реализации 2 экземпляр clsObject будет создан одновременно с созданием экземпляра clsMyClass.clsObject.Class_Initialize всегда будет выполняться, если создан clsMyClass.
Другие советы
Если в реализации 1 объявление находится внутри класса, а не в подразделе, да, область видимости одинакова для обоих примеров.
Объектная переменная будет уничтожена всякий раз, когда сборка мусора определит, что ссылок на указанный объект больше нет.Итак, в ваших двух примерах, предполагая, что область действия clsObject одинакова, нет никакой разницы в том, когда ваш объект будет уничтожен.