2008-09-17 8 views
8

オブジェクトをメンバ変数として持つクラスモジュールclsMyClassがあるとします。以下に、この非常に単純なクラスの2つの完全な実装を示します。この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では、clsObjectインスタンスは、clsMyClassがインスタンス化されるのと同時に作成されます。 clsMyClassが作成された場合、clsObject.Class_Initializeは常に実行されます。

+3

また、oObjにアクセスするたびにコンパイラがチェックを追加するため、実装1は実装2よりもパフォーマンスが悪くなります – rpetrich

0

実装1の場合、宣言はクラス内にあり、サブではありません。はい、スコープは両方の例で同じです。

0

ガベージコレクションによって前記オブジェクトへの参照がなくなったと判断するたびに、オブジェクト変数が破棄されます。したがって、2つの例では、clsObjectのスコープが同じであると仮定すると、オブジェクトが破棄されるときに違いはありません。

+2

私たちはVB6については、ガベージコレクションはありません。これは参照カウントの世界です。 –

+0

参照カウントは、VB6がメモリをクリアするために使用するアルゴリズムであり、一般に「ガベージコレクション」と呼ばれます。 https://en.wikipedia.org/wiki/Reference_counting – Rick

関連する問題