nil の意味は?

解決


リュウ  2006-11-13 04:23:17  No: 23889

サブフォームを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-13 07:23:01  No: 23890

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

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

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

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

> Form2 := TForm2.Create(nil)

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

> Form2.release;

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


リュウ  2006-11-13 20:36:00  No: 23891

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加