2008-09-17 8 views
8

Supposons que j'ai un module de classe clsMyClass avec un objet en tant que variable membre. Voici la liste de deux implémentations complètes de cette classe très simple.Quand cette variable membre VB6 est-elle détruite?

Application 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 

est-il une différence fonctionnelle entre ces deux? En particulier, la durée de vie de oObj est-elle la même?

Répondre

5

Dans l'implémentation 1, le clsObject ne sera pas instancié tant qu'il n'est pas utilisé. 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 la classe clsMyClass est instanciée. Le clsObject.Class_Initialize sera toujours exécuté si clsMyClass est créé.

+3

Notez également que l'implémentation 1 sera moins performante que l'implémentation 2, car le compilateur ajoutera des contrôles à chaque fois que l'on accède à oObj – rpetrich

0

Si en implémentation 1 la déclaration est à l'intérieur de la classe et non un sous-ensemble, oui la portée est la même pour les deux exemples.

0

La variable objet sera détruite chaque fois que la récupération de place détermine qu'il n'y a plus de références à cet objet. Donc, dans vos deux exemples, en supposant que la portée de clsObject est la même, il n'y a pas de différence quand votre objet sera détruit.

+2

Nous parlons de VB6, il n'y a pas de garbage collection. C'est le monde du comptage de référence. –

+0

Correct, le comptage des références est l'algorithme que VB6 utilise pour effacer la mémoire, communément appelé «garbage collection». https://en.wikipedia.org/wiki/Reference_counting – Rick

Questions connexes