Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10417 / 13644 ツリー ←次へ | 前へ→

【21968】setについて tetu 05/2/5(土) 1:00 質問[未読]
【21969】Re:setについて ni 05/2/5(土) 1:49 回答[未読]
【21971】Re:setについて tetu 05/2/5(土) 9:23 質問[未読]

【21968】setについて
質問  tetu  - 05/2/5(土) 1:00 -

引用なし
パスワード
   私はプログラム初心者ですので教えてください。オブジェクト変数をつかうときにsetと記述しますが、プロシージャの最後にset オブジェクト変数=nothing と付けた方がいいのでしょうか。メモリから解放すると言われていますが、メモリの空きが増えるのでしょうか。accessではつけていたようなきがしますが。

【21969】Re:setについて
回答  ni  - 05/2/5(土) 1:49 -

引用なし
パスワード
   こんにちは

オブジェクト変数は、オブジェクトの参照を記憶するものですよね。
set オブジェクト変数=Nothing
というのは、オブジェクト変数にNothingオブジェクトへの参照を記憶する
ということです。
これによって、元のオブジェクトへの参照がこのオブジェクト変数に関しては
なくなります。
オブジェクトのインスタンス(実体)は、どこからも参照されなくなったときに
解放されます。
したがって、もともとオブジェクトを参照していた変数が、このオブジェクト変数だけだったら、Nothingを参照することで元のオブジェクトへの参照がなくなるので、この時点でオブジェクトのインスタンスも解放されます。

通常は、プロシージャレベルの変数なら、プロシージャを抜けた時点で参照が解除されるので、Nothingへの参照をsetする必要はありません。
でも、オブジェクトへの参照が複雑になってくると、
たとえば、オブジェクトが、自分自身への参照を持っている場合、そのオブジェクトへの参照をなくしても、自分自身で参照しているためにインスタンスは解放されず、
しかもプロシージャからはそのオブジェクトを参照できない、幽霊オブジェクトが残ってしまうことになります。

なので、参照の仕組みがよく分からないようなときは、不要になった時点でNothingをsetしておくのが安全です。
幽霊オブジェクトが残ると動作が不安定になったりしますので、そうなってから片っ端からNothingをつけてまわるのも一案ですが、マウスが利かなくなったり、することもありますので、こまめに指定するほうがいいと思いますよ。

【21971】Re:setについて
質問  tetu  - 05/2/5(土) 9:23 -

引用なし
パスワード
   ▼ni さん:
ありがとうございます。大変参考になりました。

10417 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free