ちょっといまいち理解できていない所があり、メールを書かせて頂きました。
■ケース1
xxx := TTimer.Create( nil );
■ケース2
xxx := TTimer.Create( Self );
上記のようなケース1とケース2ではどのように動作が変わるのでしょうか?
ネットのサンプルソースには上記パターンがまちまちで、いまいちどちらが最適なのか理解できませんでした。もしも使用方法によって使い分けがならば、そのケースも教えて頂ければと思います。
以上、よろしくお願いいたします。
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
メーリス初!freemlなら絵文字が友達に届く!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fPRa2
-----------------------------------------------------[freeml by GMO]--
いわゆるクラスのCreateの引数は、クラスによって様々です、
今回はTTimerに限ってお答えすると、
引数はAOwnerですので、そこに指定するのは親コントロールになります。
TTimerの親クラスであるTComponentは自分の親であるAOwnerの破棄時にその子である
自分自身も破棄します。
Nilを指定すると親なし、Selfを指定すれば呼び出し元(通常はForm1)になります。
特に意識しないで使う場合はSelfを入れておくのが無難です。
赤尾鉄平
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
夏休みに撮った写真をMLにアップしよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fPTD7
元)引数はAOwnerですので、そこに指定するのは親コントロールになります。
修)引数はAOwnerですので、そこに指定するのは親コンポーネントになります。
元)TTimerの親クラスであるTComponentは自分の親であるAOwnerの破棄時にその子で
ある
修)TTimerの派生元クラスであるTComponentは自分の親であるAOwnerの破棄時にその
子である
紛らわしくてすみません。
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
ベジモンゲットだぜ!ゆるカワなベジモンと新しい農場ライフ♪
http://ad.freeml.com/cgi-bin/sa.cgi?id=fPTHJ
xxx := TTimer.Create( nil );
の場合、FreeAndNil( xxx );を記述しないと派生元を破棄してもxxxが解放されずメモリリークする。
xxx := TTimer.Create( Self );
の場合、FreeAndNil( xxx );を記述しないでも、派生元が破棄されると同時にxxxも破棄される為メモリリークしない、という理解で間違えてないでしょうか?
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
ちょっとした連絡に♪メンバー掲示板を有効活用しよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fPUgA
赤尾鉄平
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
練習の予定も共有スケジュールに登録しよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fPU4B
まず、Create で指定するコンポーネントは、コンポーネントの「オーナ」です。
「親」ではありません。
#派生元 というのも変ですね。
Createにオーナを指定すると、オーナはそのコンポーネントを「所有」し、
オーナが破棄されるとき、オーナが「所有」するコンポーネントも一緒に破棄されます。
オーナはどんなコンポーネントでもなれまずが、通常は、フォーム、データモジュール
又はフレームです。つまり、設計時にコンポーネントを貼ることができるものです。
つまり、オーナとは、設計時に貼りつけたコンポーネントをいちいち破棄しなくても
よいようにする仕組みです。設計時にコンポーネントを貼るとコンポーネントのオーナは
フォーム、データモジュール又はフレームになります。
コンポーネントを動的に Create で作成するとき、オーナの指定は、無難に貼り付け先の
フォーム等を選べばよいでしょう。
オーナを指定して作ったコンポーネントは随時 Free できます。
れお さんは書きました:
----------
東京都 日野市 中村拓男
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
メーリス初!freemlなら絵文字が友達に届く!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fPXZ2