2

プロセスは OS によって強制終了され、割り当てられたすべてのメモリはとにかくリサイクルされるため、ユニットのファイナライズ セクションでオブジェクト/リソースを解放しなくても問題ありませんか?

例えば、

unit Threading;

interface

implementation

  var threadpool: ThreadPool;

initialization

  threadpool := ThreadPool.Create;

finalization

  threadpool.Free; // is it OK to remove this?

end.
4

3 に答える 3

1

はい、大丈夫ですが、

1) 次に、次の構造を使用できます。

ThreadPool := ThreadPool.Create;
RegisterExpectedMemoryLeak(ThreadPool);

このアプローチにより、ユニット参照の明示的な順序を強制する必要がなくなります (そのため、このユニットはそれを使用する前に初期化解除されません)。

2) それ以外の場合は、変数を nil にすることができます (または System.SysUtils 依存関係が必要な場合は FreeAndNil を使用します):

finalization
  ThreadPool.Free;
  ThreadPool := nil;

このようにして、ThreadPool がリリースされたときに誰がアクセスしているかを簡単に見つけることができます。

3) ソース クラスの実装またはラッパーに TInterfacedObject を使用できます。

于 2015-10-15T13:16:40.903 に答える