する必要があり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
)。