2008-09-17 10 views
8

Supongamos que tengo un módulo de clase clsMyClass con un objeto como variable miembro. A continuación se enumeran dos implementaciones completas de esta clase muy simple.¿Cuándo se destruye esta variable de miembro VB6?

Implementación 1:

Dim oObj As New clsObject 

Aplicación 2:

Dim oObj As clsObject 

Private Sub Class_Initialize() 
    Set oObj = New clsObject 
End Sub 

Private Sub Class_Terminate() 
    Set oObj = Nothing 
End Sub 

¿Hay alguna diferencia funcional entre estos dos? En particular, ¿la vida de oObj es la misma?

Respuesta

5

En la implementación 1, el clsObject no se creará una instancia hasta que se use. Si nunca se usa, el evento clsObject.Class_Initialize nunca se activará.

En la implementación 2, la instancia de clsObject se creará al mismo tiempo que se crea una instancia del clsMyClass. El clsObject.Class_Initialize siempre se ejecutará si se crea clsMyClass.

+3

También tenga en cuenta que la Implementación 1 tendrá un rendimiento peor que la Implementación 2 porque el compilador agregará comprobaciones cada vez que se acceda a OObj – rpetrich

0

Si en la implementación 1 la declaración está dentro de la clase y no en un sub, sí, el alcance es el mismo para ambos ejemplos.

0

La variable de objeto se destruirá siempre que la recolección de basura determine que no hay más referencias a dicho objeto. Entonces en sus dos ejemplos, suponiendo que el alcance de clsObject es el mismo, no hay diferencia en cuanto a cuándo se destruirá su objeto.

+2

Estamos hablando de VB6, no hay recolección de basura. Este es el mundo del conteo de referencias. –

+0

El recuento correcto y de referencia es el algoritmo que VB6 usa para borrar la memoria, comúnmente denominada "recolección de basura". https://en.wikipedia.org/wiki/Reference_counting – Rick

Cuestiones relacionadas