2013-03-29 11 views
24

は次のように宣言されているTMyRecordTList<string>TList<Double>TList<Integer>またはTList<TMyRecord>、のような一般的なリストを解放していますか?ジェネリックTList <T>を解放するには?</p> <pre><code>type TMyRecord = record MyString: string; MyDouble: Double; MyInteger: Integer; end; </code></pre> <p>は、追加作業が必要か<code>MyList.Free</code>で十分です:

+14

+1。非常にうまく書かれた質問。 –

答えて

27

エグゼクティブサマリー

MyList.Freeで十分です。

詳細な回答

TList<T>汎用コンテナは、その内容を所有しています。コンテナを解放すると、その内容も処分されます。

Tがアンマネージリファレンスである場合、ポインタまたはクラスのいずれかである場合、リストは参照を所有します。それは参照が参照するものを所有していません。したがって、TList<TObject>がある場合、オブジェクトをいくつか追加してリストを解放すると、参照は破棄されますが、オブジェクトは残ります。ですから、これに対処するにはTObjectList<T>があります。そのコンテナは、オブジェクトと参照を所有するように構成することができ、適切な時点でオブジェクトを処分することができます。

ここでは、それぞれのリストに値型または管理型のいずれかが含まれています。リストはそれらのオブジェクトを所有し、破壊されたときにそのオブジェクトを処分します。だからあなたのリストのすべてについて、MyList.Freeが必要です。

関連する問題