该VB6成员变量何时被销毁?

时间:2020-03-05 18:59:40  来源:igfitidea点击:

假设我有一个类模块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

两者之间在功能上有什么区别吗?特别是oBj的生存期是否相同?

解决方案

回答

如果在实现1中,声明位于类内而不是子类内,则对两个示例,范围都相同。

回答

每当垃圾回收确定不再有对该对象的引用时,该对象变量将被销毁。因此,在两个示例中,假设clsObject的范围相同,则销毁对象的时间没有区别。

回答

在实现1中,除非使用clsObject,否则不会对其进行实例化。如果从不使用它,则永远不会触发clsObject.Class_Initialize事件。

在实现2中,将在实例化clsMyClass的同时创建clsObject实例。如果创建了clsMyClass,则将始终执行clsObject.Class_Initialize。