« ひまわり証券のチャートが改悪(HitsChart) (^ω^#)ビキビキ | メイン | 【緊急告知】Delphi使い必見!公式のDelphiアンケートに答えよう! »

[Delphi] Assigned(Obj) か if Obj <> nil か?

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)

Ko-Ta:

なるほどなるほど。assignedとメソッドポインタの関係がようやく見えました。あざーっす。

TOBY:

実装見てないので、なんで?なところもあるので、後日検証してみようと思っとります。

コメントを投稿

Twitter(今何してる?)

プロフィール

あわせて読みたい

あわせて読みたいブログパーツ

人気エントリー

About

2008年02月03日 09:45に投稿されたエントリーのページです。

ひとつ前の投稿は「[投機] ひまわり証券のチャートが改悪(HitsChart) (^ω^#)ビキビキ」です。

次の投稿は「[Delphi] 【緊急告知】Delphi使い必見!公式のDelphiアンケートに答えよう!」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。