|
▼小僧 さん、▼よろずや さん:
こんばんは。
http://www.tsware.jp/labo/labo_19.htm
のサイト、私も読ませていただきました。
このサイトに記述されていること
「オブジェクトは適用範囲外になると自動的に解放されている」
というのは本来なら、こうあるべきだと思いますけどね。
ただ、
sub test()
dim aa as object
set aa=createobject("excel.appliaction")
・
・
・
set aa=nothing
end sub
の Set aa=nothing
をしなかったためのトラブルがあったという投稿を私は
何回か目にした事はあります。
自分自身では確たる経験はありません。
>
>では何回か実験をすれば
>
>Set XX = Nothing
>
>のタイミングでメモリが解放されるのか、という話なのですが…。
>
>
>というのもここの掲示板での話だけでなく、他の方(職場の同僚など)にも
>
>「Set xx = Nothing で メモリを解放している訳ではない」
>
>と言い切ってしまっております。
オブジェクトとは、データとプログラムをカプセル化したものですよね?
だとしたら、
>「Set xx = Nothing で メモリを解放している訳ではない」
これは、必ずしも正しくはないと思いますよ!!
例えば、
クラスモジュール(class1)で
'==================================================
Public a As Variant
'===================================================================
Private Sub Class_Initialize()
a = Array(String(1024, "a"), String(1024, "a"), String(1024, "a"), String(1024, "a"))
End Sub
'===================================================================
Private Sub Class_Terminate()
Erase a
End Sub
なんてコードを書いた場合、
dim cls as new class1
インスタンスの作成で Initializeイベントが発生し、
変数aには、array関数でデータが設定されます。
Set cls=nothing
でTerminateイベントが実行され、aはEmptyになります。
この場合
Set cls=nothing が参照の初期化のみだとは思えませんが、
いかがですか?
当然ですが、DBやRecordsetは中でどんなイベントが動くのかは
わかりませんけどね!!
|
|