2008-09-17 29 views
8

假设我有一个具有对象作为成员变量的类模块clsMyClass。下面列出了这个非常简单的类的两个完整实现。这个VB6成员变量何时被销毁?

实现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 

有这两者之间有什么功能上的区别?特别是oObj的使用寿命是否一样?

回答

5

在实现1中,clsObject在使用前不会被实例化。如果它从未使用过,那么clsObject.Class_Initialize事件永远不会触发。

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

0

如果在实现1中声明是在类内部而不是子类,那么这两个例子的范围是相同的。

0

只要垃圾收集确定不再有对所述对象的引用,对象变量就会被销毁。所以在你的两个例子中,假设clsObject的作用域是相同的,那么当你的对象被销毁的时候没有区别。

+2

我们在谈论VB6,没有垃圾收集。这是参考计数的世界。 – 2008-09-17 19:12:50

+0

正确,引用计数是VB6用来清除内存的算法,通常称为“垃圾收集”。 https://en.wikipedia.org/wiki/Reference_counting – Rick 2012-03-23 14:24:11