0

ここで何が起こりますか?

プロシージャが終了して範囲外になったとき、オブジェクトは有効なままですか? 未割り当てのままになりますか、それともまだ参照できますか?

ユーザーが自分のコントロールにアイテムを追加することを決定するたびに、そのようなアイテムを追加する必要があります。また、ユーザーのアクティビティを作成してクラスのオブジェクトを追加する必要があります。アプリでさらに使用するためにこれらのオブジェクトを処理する必要がある場合、それらはスコープ内にとどまりますか、それともアクセス可能になりますか? または、それらの参照が失われますか?

     procedure TForm1.Button1Click(Sender: TObject);
     var
       LMyCustomObj : TMyCustomObject;
     begin
       LMyCustomObj := TMyCustomObject.Create;

       ListBox1.Items.AddObject('1', LMyCustomObj);
     end;

さらに追加すると

     LMyCustomObj.Free; 

私の関数では、コントロールのコレクションからも削除されますか、それともメモリ リークが発生しますか?

4

1 に答える 1

5

プロシージャが終了して範囲外になったときに、オブジェクトは有効なままになりますか

はい。

アプリでさらに使用するためにこれらのオブジェクトを処理する必要がある場合、それらはスコープ内にとどまりますか、それともアクセス可能になりますか?

宿泊施設からアクセスできListBox.Items.Objects[]ます。

またはそれらの参照が失われますか?

いいえ、ListBox にはそれらへの参照があるためです。

さらに追加すると

LMyCustomObj.Free;  

私の機能では、それらはコントロールのコレクションからも削除されますか

いいえ。使い終わったら、手動で削除する必要があります。

またはメモリリークが発生しますか?

いいえ。ListBox が無効なオブジェクトへの参照を保持するようになったため、後でコードをクラッシュさせる可能性が高くなります。

于 2012-10-04T20:55:49.053 に答える