GetEnumerator
オブジェクトのメソッドを呼び出す場合Generics.Collections
、使い終わったときに列挙子を明示的に解放する必要がありますか?
質問する
168 次
1 に答える
8
はい、列挙子を解放する必要があります。誰が呼び出しGetEnumerator
ても、それが返すものを所有します。
ループの場合for/in
、コンパイラはコードを記述し、列挙子オブジェクトが確実に破棄されるようにします。それを呼び出すとき、列挙子を破棄するのはあなたの仕事です。
実際、これは自分で答えるのが非常に簡単な質問です。呼び出しGetEnumerator
て失敗するプログラムを作成するだけFree
です。メモリ マネージャの機能を使用して、オブジェクトがリークされていないかどうかを確認します。
uses
System.Generics.Collections;
begin
ReportMemoryLeaksOnShutdown := True;
with TList<Integer>.Create do
begin
GetEnumerator;
Free;
end;
end.
これにより、次のリークレポートが作成されます。
予期しないメモリ リークが発生しました。予期しない小さなブロック リークは次のとおりです。
- 13~20バイト:TList.TEnumerator×1
于 2013-04-18T15:20:54.070 に答える