Quand cette variable membre VB6 est-elle détruite?
-
01-07-2019 - |
Question
Supposons que j'ai un module de classe clsMyClass
avec un objet en tant que variable membre. Vous trouverez ci-dessous deux implémentations complètes de cette classe très simple.
Mise en oeuvre 1:
Dim oObj As New clsObject
Mise en œuvre 2:
Dim oObj As clsObject
Private Sub Class_Initialize()
Set oObj = New clsObject
End Sub
Private Sub Class_Terminate()
Set oObj = Nothing
End Sub
Y at-il une différence fonctionnelle entre ces deux? En particulier, la durée de vie de oObj
est-elle la même?
La solution
Dans l'implémentation 1, l'objet clsObject ne sera pas instancié avant son utilisation. S'il n'est jamais utilisé, l'événement clsObject.Class_Initialize ne se déclenchera jamais.
Dans l'implémentation 2, l'instance clsObject sera créée en même temps que l'instance clsMyClass. ClsObject.Class_Initialize sera toujours exécuté si clsMyClass est créé.
Autres conseils
Si, dans l'implémentation 1, la déclaration est à l'intérieur de la classe et non un sous-marin, oui, la portée est la même pour les deux exemples.
La variable d'objet sera détruite chaque fois que le garbage collection détermine qu'il n'y a plus de références à cet objet. Ainsi, dans vos deux exemples, en supposant que la portée de clsObject soit la même, il n’ya aucune différence quant au moment où votre objet sera détruit.