0

カスタム コンポーネント ' ' の破棄手順がありますTCARD。次に、実行時に配列を作成します

Cards: array[1..20] of TCards

次に、いくつかのことを行います...そして手順の最後に、配列内のすべての TCard を破棄したいと思います。どうやってこれを行うのですか、それともそのように一度に1つずつ行う必要がありますか.

cards[1].destroy;
cards[2].destroy;
....
cards[20].destroy;
4

1 に答える 1

6

を使用する場合TObjectList<T>、これは自動的に行われます。必要なのはリストを破棄することだけです。

Uses
  Generics.Collections,
...

// define your list
Cards: TObjectList<TCard>;

...

// create list
Cards := TObjectList<TCard>.Create;
try
 // Create and add your card objects
 ACard := TCard.Create;
 Cards.Add(ACard);
 // do something with Cards
 ...
 // destroy cards - this will automatically free the objects owned by the list
finally
 Cards.Free;
end;

追加のボーナスとして、独自のカスタム オブジェクトを作成し、それにカード関連の機能を追加できます。

type
  TMyCardList = class(TObjectList<TCard>)
  public
   // add needed behaviours
   function FindHighestCardBySuit(ASuit : TSuit) : TCard;
   procedure Shuffle;
   // etc ...
  end;  

何らかの理由で を使用したくない場合はTObjectList、単純なループでオブジェクトを解放できます。

procedure FreeCards(Cards : TCards);

var
  Card : TCard;

begin
 For Card in Cards do
  Card.Free;
end;
于 2013-10-22T06:05:29.093 に答える