посмотри реализацию TList в Delphi:
Код:
TList = class(TObject)
private
FList: PPointerList;
...
MaxListSize = Maxint div 16;
PPointerList = ^TPointerList;
TPointerList = array[0..MaxListSize - 1] of Pointer;
легко увидеть, что внутри тоже используется массив. только в TList array of Pointer, а тебе нужно будет array of TFigure. вообще TList легко выдрать из Classes.pas и переделать под свой тип указателя.