オブジェクトのメモリ管理について

解決


ポチ  2007-01-19 02:49:56  No: 134905

はじめまして。初歩的な質問で申し訳ないのですが、
VB6.0の場合、Newしたオブジェクトに対して再度Newした場合、メモリ上にどのようにあつかわれるのでしょうか。
Newするごとに新しいインスタンスが生成されるのでしょうか。
#下記の2つの違いはありますか?


    Dim a As Object
    For i = 0 To 100
        Set a = New Class1
        Set a = Nothing
    Next


    Dim a As Object
    For i = 0 To 100
        Set a = New Class1
    Next
    Set a = Nothing


魔界の仮面弁士  2007-01-19 11:53:12  No: 134906

変数に、別のオブジェクトが代入された場合、
前に参照していたオブジェクトの参照カウントが減らされ、
新たに代入されたオブジェクトの参照カウントが増加します。

その結果、前に参照していたオブジェクトの参照カウントが
0 になったのだとしたら、どこからも参照されていないと判断され、
自動的に解放されます。

> #下記の2つの違いはありますか?
Class1 に下記のコードを加えて、ステップ実行すれば分かるかと。

Private Sub Class_Initialize()
    Debug.Print "作成:"; TypeName(Me), ObjPtr(Me)
End Sub

Private Sub Class_Terminate()
    Debug.Print "解放:"; TypeName(Me), ObjPtr(Me)
End Sub


ポチ  2007-01-19 20:38:05  No: 134907

魔界の仮面弁士さんご回答ありがとうございます。
代入した場合は、参照カウントが追加されてから減らされるのですね。
2つの違いも理解できました。
本当にありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加