掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ByValで受け取ったObujectの後始末 (ID:138147)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>> subBでもByValで受け取ったObjectを >> .Closeして= Nothingしてあげなくちゃいけないでしょうか? > ByVal 引数を Nothing にする必要はありません。 今度は、ByVal および ByRef それぞれで、引数を Nothing にした場合。 ≪呼び出されたプロシージャ側で、Nothing する場合≫ Sub Form_Load() Dim a As Object Dim b As Object Set a = New Collection '参照カウント→1になる Set b = a '参照カウント→2に増加 Call ByValMethodNothing(a) '引数の参照渡し '参照カウント→2のまま 'この時点で、変数 a はオブジェクトを保持したままである。 Call ByRefMethodNothing(a) '引数の参照渡し '参照カウント→1に減少 'ByRefMethodNothing 内の処理で、変数 a は Nothing 状態になっている。 Set a = Nothing '参照カウント→1のまま '既に a は Nothing 状態なので、参照カウントには影響を与えない。 Set b = Nothing '参照カウント→0に減少→オブジェクトが破棄される End Sub Sub ByValMethodNothing(ByVal o As Object) '値渡しのため、参照回数が増加 '参照カウント→3に増加 Set o = Nothing '参照カウント→2に減少 End Sub 'すでに引数 o は Nothing なので、o が破棄されても参照カウントは変化しない Sub ByRefMethodNothing(ByRef o As Object) '参照渡しのため、参照回数は変化しない '参照カウント→2のまま Set o = Nothing '参照カウント→1に減少 End Sub 'すでに引数 o は Nothing なので、o が破棄されても参照カウントは変化しない
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.