する必要がありfreeます。
Class.Createは単なる式であるため、Delphi は結果の値がどの式から来たのかを知ることができません。
VCL ソースを読むことができます - 常に明示的.Freeです。
そして、非オブジェクトの例を考えることができます:
var r: record .... end;
with r do begin
...
end;
Delphi がwith最後にすべてを解放しようとした場合、free非オブジェクト化を試みますか?
with SomeObjectFactory.GetMeAnObject do begin
...
end;
ここでは、コンストラクターではなく、関数によってオブジェクトを作成します。そして、この関数はTLabel.Fontまたはと違いはありませんTDataSet.FieldByName。ここでDelphifreeを使用する必要がありますか?
危険な当て推量を避けて均一に保つことwithは、まさにwith. それは単なるエイリアスです。これ以上何もない。Using(x){..}これは 1974 年に設計されたもので、最新の .Net/Scalaコンストラクトの機能を複製するものではありません。
あなたがおそらく見たのは次のような構造でした
with TForm.Create(Application) do ...;
with TLabel.Create(MainForm.Panel1) do ...;
これは非常に異なります。新しく作成されたコントロールを所有者に属するものとして挿入します。所有者は、それ自体が dのfree場合、所有するすべてのコンポーネントになります。freeしかし、それは使用しませんCreate(nil)。そして、それがまだ行われている場合、withブロック内で明示的な呼び出しが表示され、オブジェクトがコンテナー/親にバインドされます (ただし、 と バインディングの間の例外の場合は非常に脆弱です.Create)。