はい、オブジェクトを作成するコードがそれを解放する責任がある場合、それは常に良い考えです(必須)。そうでない場合、try/finally は適切ではありませんが、どちらも .Free ではありません。
ただし、このボイラープレート コードを「ビジネス ロジック」に追加するのは面倒な場合があり、オブジェクトを解放するのと同じ保証があるが、はるかにクリーンな (そして他の利点がある) アプローチを検討することをお勧めします。たとえば、私の独自の AutoFree() 実装。
AutoFree() を使用すると、コードを次のように記述できます。
aObject := TObject.Create;
AutoFree(@aObject);
aObject.AProcedure();
あるいは、実装は参照への参照を使用するため (auto-NIL と Free を有効にするため)、そのようなハウスキーピング宣言を遠ざけるために AutoFree にしたい参照を事前登録することもできます。ビジネスロジックから解放し、コードの真の「肉」を可能な限りきれいに保ちます (これは、潜在的に複数のオブジェクトを解放する必要がある場合に特に有益です):
AutoFree(@aObject1);
AutoFree(@aObject2);
aObject1 := TObject.Create;
aObject1.AProcedure();
// Later on aObject2 is (or may be) also created
:
私の最初の投稿には示されていませんが、単一の AutoFree() 呼び出しで複数の参照を登録することをサポートするメカニズムへの後で追加されたものですが、必要に応じて、これをサポートするために必要な変更を自分で把握できると確信しています。これを行うことができます:
AutoFree([@aObject1, @aObject2]);
aObject1 := TObject.Create;
aObject1.AProcedure();
// Later on aObject2 is (or may be) also created
: