2008-09-17 56 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