31

TList<string>TList<Double>TList<Integer>またはのような一般的なリストを解放しますか? TList<TMyRecord>whereTMyRecordは次のように宣言されています:

type
  TMyRecord = record
    MyString: string;
    MyDouble: Double;
    MyInteger: Integer;
  end;

追加の作業が必要ですか、それともMyList.Free十分ですか?

4

1 に答える 1

33

エグゼクティブサマリー

MyList.Free十分なものです。

詳細な回答

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

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

ここで、シナリオでは、各リストに値型またはマネージド型のいずれかが含まれています。リストはそれらのオブジェクトを所有し、破棄されるとそれらを破棄します。したがって、すべてのリストについて、MyList.Free必要なのはそれだけです。

于 2013-03-29T16:12:07.300 に答える