Despues de la extensa, eXtupenda y amena explicación de
Dec, solo me queda añadir que Yo usaría un TObjectList por comodidad (no tienes que establecer los límites ni modificarlos al añadir objetos, se hace solo, además permite ordenar los objetos y sobre todo destruirlos de una forma muy facil; todos de una sola tacada o bien destruir uno solo) y tambien porque queda un código más limpio.
Tambien te remito a la Búsqueda de los foros en donde se ha hablado mucho sobre los TObjectList.
Código Delphi
[-]
var L:TobjectList;
i:Integer;
begin
L := TobjectList.Create(true); for i:=0 to 2000 do
begin
L.Add(Tedit.Create(Self); Tedit(L.items[i]).Parent := self ; accedo al objeto a través de la lista. Sin usar variables
end;
Sleep(3000);
Freeandnil(L); end;
Saludos