- 116 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/08/08(水) 15:35:15 ]
- >>115
Delphiのオブジェクト変数(キーワードclassを使うもの)は常にポインタです. つまりDelphiのオブジェクト変数はそのオブジェクトの場所を覚えているに過ぎません. そしてTObjectListはオブジェクトの場所の一覧です. TObjectListのAddメソッドではオブジェクトの場所が渡されて内部のリストにこの場所を書き足します. たとえば以下のようなコードだと TMyForm = class(TForm) private FList: TObjectList; procedure Nantoka; end; procedure TMyForm.Nantoka; begin obj := TMyObject.Create; // @ FList.Add(obj); // A end; @でオブジェクトが生成されてその場所が変数objに書き込まれます. Aでリストにそのオブジェクトの場所が渡ります. メソッドNantokaを抜けると変数objは消滅しますがオブジェクトそのものは残ります. (目的のビルの場所を書いたメモが捨てられてもそのビルが消滅するわけではないのと同じです) リストはオブジェクトの場所しか見ていないので 変数objが消滅しても見てはいけないところを見てしまう心配はありません. これはリストが項目オブジェクトを所有する場合もしない場合も全く同じです.
|

|