3

私はこの質問を見ていましたが、コンポーネントコンストラクターの所有者としての nil の意味は何だろうと思っています。

SomeComponent := TSomeComponent.Create(nil);

このコンストラクターを使用するときは自分で解放する必要があることはわかっていますが、それが作成時に所有者を渡す唯一の理由ですか? そして、それを解放するのを忘れてアプリケーションを閉じるとどうなりますか - このオブジェクトはゴミとしてメモリに残るということですか?

どうもありがとう :)

4

2 に答える 2

15

これは、自分で解放する責任があることを意味します。

コンポーネントをフォームにドロップすると、フォームを所有者として構築されます。これは、フォームが解放されると、フォームが所有するすべてのコンポーネントを解放することを意味します。別の所有者を渡す場合も同様です (たとえば、実行時に TButton を作成し、TPanel をその所有者にする場合)。所有者が破棄されると、プロセスで所有しているすべてのコンポーネントが解放されます。

所有者として nil を使用するということは、コードで手動で作成していることを意味し、自分で解放する責任を受け入れることになります。忘れてアプリケーションを閉じると、メモリが解放されてオペレーティング システムに戻されます。ただし、忘れてから長時間アプリケーションを実行すると、使用されるべきではないメモリのチャンクが使用されます。

于 2011-03-24T13:59:24.770 に答える
1

この記事を読む必要があります。この所有権パラダイムを処理するためにVCLがどのように設計されているかについて説明します。

この記事では、所有者と一緒に作成されたコンポーネントを解放しないことが重要である理由の例も示しています。

于 2011-03-24T14:30:12.333 に答える