掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
動的フレームの再作成でエラー (ID:22619)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まず、前提としてメインスレッドしか存在しないという事で話しをしています。 もしかして、皆さんは複数のスレッドが存在するという前提で話しをされて いたんでしょうか? >> procedure TForm1.Button1Click(Sender: TObject); >> begin >> Form2.Release; >> Form2 := nil; >> end; >> この3つのメソッドは同じ事をしているので >これだけ同じではありませんよ。 >Release は遅延の Free ですから、実際に Free されるより変数 Form2 が nil >になる方が先になりますのでマズイです。 確かに厳密には全く同じではないですが、Form2にnilが先に代入されて TForm1.Button1Clickを抜けた直後にアイドルループでFreeされる訳ですよね? どのようにマズイのか分かりません。 あまり経験が無いので分からないだけかもしれませんが、教えて頂けると ありがたいです。 >また、Free してから nil を代入することと FreeAndNil とは同等ではありません。 >これは FreeAndNil のソースを見てみると分かります。 たしかに、これも厳密には全く同じではありませんね。 しかし、FreeAndNilは別スレッドから参照される可能性があるので、先に 参照変数にnilを代入して安全を確保してから解放しているというだけの 事のように思いますが、メインスレッドしか存在しない状況ではどちらも 同じと考えて差し支えないように思います。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.