nil の意味は?

解決


リュウ  2006-11-12 19:23:17  No: 23889  IP: 192.*.*.*

サブフォームをButton1のクリックで作成し、
Button2でリリースしたいのですが、次のようなコードにすると、
初めてButton1を押した時には、作成されるのですが、Button2でリリースしても
2回目以降は作成されません。つまり、Form2のインスタンスは無くても
Form2はnilでは無いようです。
nilとは、インスタンスが無い状態を表すのではないのでしょうか?
また、Form2のインスタンスがない状態は、どのように調べたらよいのでしょうか。
よろしくお願いします。



procedure TForm1.Button1Click(Sender: TObject);
begin
  if Form2 = nil then
    Form2 := TForm2.Create(nil)
  else
    exit;
  Form2.show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Form2 <> nil then
    Form2.release;
end;

編集 削除
うんと  2006-11-12 22:23:01  No: 23890  IP: 192.*.*.*

> nilとは、インスタンスが無い状態を表すのではないのでしょうか?

違います。そのインスタンス変数がなにも参照を持ってないことを示します。

> 2回目以降は作成されません。つまり、Form2のインスタンスは無くても
> Form2はnilでは無いようです。

これは当然です。1回目で

> Form2 := TForm2.Create(nil)

と、Form2 という名前の変数に代入してますね。でも

> Form2.release;

このあと、Form2 には nil を代入してませんから、インスタンスが無くなっても
Form2 には、代入されたままになっています。Release は遅延を利用して
インスタンスを破棄するメソッドですが、変数に自動的に nil を代入するわけ
ではありません。

編集 削除
リュウ  2006-11-13 11:36:00  No: 23891  IP: 192.*.*.*

ちょっと勘違いをしていたようです。
どうもありがとうございました。

編集 削除