我有自定义组件“TCARD
”的销毁过程。然后在运行时我创建一个数组
Cards: array[1..20] of TCards
然后我做了一些事......
在程序结束时,我想销毁阵列中的所有TC。我该怎么做或者我必须一次这样做。
cards[1].destroy;
cards[2].destroy;
....
cards[20].destroy;
答案 0 :(得分: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;