Quando esta variável membro do VB6 é destruído?
-
01-07-2019 - |
Pergunta
Suponha que eu tenho um clsMyClass
módulo de classe com um objeto como uma variável de membro. Listados abaixo são duas implementações completas desta classe muito simples.
Implementação 1:
Dim oObj As New clsObject
Implementação 2:
Dim oObj As clsObject
Private Sub Class_Initialize()
Set oObj = New clsObject
End Sub
Private Sub Class_Terminate()
Set oObj = Nothing
End Sub
Existe alguma diferença funcional entre esses dois? Em particular, é a vida de oObj
o mesmo?
Solução
Na implementação 1 a clsObject não vai ficar instanciado até que seja utilizado. Se ela nunca é usada, então o evento clsObject.Class_Initialize nunca vai disparar.
Na implementação 2, a instância clsObject será criada ao mesmo tempo que o clsMyClass é instanciado. O clsObject.Class_Initialize sempre será executado se clsMyClass é criado.
Outras dicas
Se na implementação 1 a declaração está dentro da classe e não um sub, sim, o escopo é o mesmo para ambos os exemplos.
A variável de objeto será destruído sempre que a coleta de lixo determina que não há mais referências ao dito objecto. Assim, em seus dois exemplos, assumindo que o âmbito da clsObject é o mesmo, não há nenhuma diferença quando o seu objeto será destruído.