掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ByValで受け取ったObujectの後始末 (ID:138146)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>>オブジェクトの「参照カウント」の概念はご存知ですか? >ガベージコレクションで使う >オブジェクトのポインタ?でしょうか? # オブジェクトのポインタだと、 # ptr = ObjPtr(obj) # の意味になってしまうので、微妙に違うかな…。 作成したオブジェクトを、変数等に代入すると、そのオブジェクトの 参照カウントが +1 されます。 変数の解放や Nothing の代入などによって参照が破棄されると、 参照カウントは -1 されます。 そして参照カウントが 0 になった時点で、オブジェクト自体も 破棄される…という仕組みの事ですね。 ≪呼び出されたプロシージャ側で、Nothing しない場合≫ Sub Form_Load() Dim a As Object Dim b As Object Set a = New Collection '参照カウント→1になる Set b = a '参照カウント→2に増加 Call ByValMethod(a) '引数の参照渡し '参照カウント→2のまま Call ByRefMethod(a) '引数の参照渡し '参照カウント→2のまま Set a = Nothing '参照カウント→1に減少 Set b = Nothing '参照カウント→0に減少→オブジェクトが破棄される End Sub Sub ByValMethod(ByVal o As Object) '値渡しのため、参照回数が増加 '参照カウント→3に増加 End Sub 'プロシージャ終了に伴い、自動解放されて 2 に戻る Sub ByRefMethod(ByRef o As Object) '参照渡しのため、参照回数は変化しない '参照カウント→2のまま End Sub
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.