VB.NET メモリーリークについての疑問

解決


浜のサム  URL  2004-06-02 20:35:44  No: 83714  IP: [192.*.*.*]

VB.NET  で  ListーIterator  をコードしたのですが、メモリーリーク
していないかなかなか確かめられないので質問します。

  AAA=    NEW  CLASSA
    
で    AAAを作成後、利用して  、以降  さらに

    AAA=  NEW  CLASSA  

で別の用途に使うと、先に使ったAAAの情報は、(不要なのだが)
どうなるのですか?
(1)システムが監視して、指し示す親無し子はFree  してくれる.

  (2)プログラムが終わるまでメモリーは占有される。
          プログラム終了時に  Free  される。

(3)IPLしないとフリーされない。

(1)以外の場合は、C++でいう  Destructer  関数を
        使うことが必要(3)は必須
      の場合  Finalize()    でOK?
  また  Aの要素に  CLASSBを生成してこれ保持していたとすると
      ClassB  のFINALIZE()    も  CLASSA  のFINALIZE
    で自動的に実行かれるのでしょうか?

    親無し子は自動的にFreeして  適当に  GAVAGE  COLLECTION  
    が呼ばれるなんて期待のし過ぎでしょうか?
      
親無し子=  当該  Instanceのアドレスを参照しているところが無い
以上

編集    削除
ねろ  2004-06-02 22:52:45  No: 83715  IP: [192.*.*.*]

複雑です
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconautomaticmemorymanagement.asp
をご覧下さい。
最初のAAAは次の  AAA=  NEW  CLASSA  が来て既に参照が終わっているので、
AAAがアンマネージ リソースで無かったらいずれ適当な時期にランタイムの
ガベージ コレクタがメモリーを解放する。
AAAがアンマネージ リソースだったらDisposeで明示的に開放する。

編集    削除
サム  2004-06-03 12:07:06  No: 83716  IP: [192.*.*.*]

ねろさま

よく分かりました
安心しました。

編集    削除