Delphiのポインタが nil かどうかチェックするのに、
Assigned(Obj) か if Obj <> nil then を使うか?
この長年の疑問についに終止符が!!
……って、しらなかっただけです。
↓詳細はこちら
DelWiki - 資料/Assigned
……よくわかりません、が、超意訳してみると
Delphi のメソッドポインタは、
オブジェクトのインスタンスと、
メソッドノアドレスの2つを含む構造体そのもの。
まあ、これはいいですよね?
で、Assignedのときは、nilチェックは
その構造体の片方しかチェックしない。
そして、メソッドポインタの片方に内部的な値が入るときがある(へえー)。
ということで、その場合用に Assigned(Obj) を使っておけば安心。
結論:
メソッドポインタには Assigned(Obj) を使っておきましょう。
その他には、if Obj <> nil then でも大丈夫。
というか 全部 Assigned(Obj) でいい。
あとで検証して見る予定。
カテゴリ: [ Delphi ]
コメント (2)
なるほどなるほど。assignedとメソッドポインタの関係がようやく見えました。あざーっす。
投稿者: Ko-Ta | 2008年02月04日 17:30
日時: 2008年02月04日 17:30
実装見てないので、なんで?なところもあるので、後日検証してみようと思っとります。
投稿者: TOBY | 2008年02月08日 09:50
日時: 2008年02月08日 09:50