我有一个自定义组件“ TCARD”的销毁程序。然后在运行时我创建一个数组
Cards: array[1..20] of TCards
然后我做一些事情......在程序结束时,我想销毁阵列中的所有 TCard。我该怎么做,或者我必须像这样一次做每一个。
cards[1].destroy;
cards[2].destroy;
....
cards[20].destroy;
我有一个自定义组件“ TCARD”的销毁程序。然后在运行时我创建一个数组
Cards: array[1..20] of TCards
然后我做一些事情......在程序结束时,我想销毁阵列中的所有 TCard。我该怎么做,或者我必须像这样一次做每一个。
cards[1].destroy;
cards[2].destroy;
....
cards[20].destroy;
如果您使用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;