[fpc-pascal] Arrays of objects
Adrian Maier
adrian.maier at gmail.com
Wed Oct 31 12:21:45 CET 2007
On 10/31/07, Joao Morais <post at joaomorais.com.br> wrote:
> Adrian Maier wrote:
> > On 10/31/07, Matt Emson <memsom at interalpha.co.uk> wrote:
> >> Adrian Maier wrote:
> >>> Hello,
> >>>
> >>> I'm seeking for advice about which is the best way to hold an array of
> >>> class instances
> >>> I need to access the elements using its position (like a regular
> >>> array) , and also i'd like
> >>> the structure to grow when I add more elements
> >> TObjectList
> >
> > I am aware that TObjectList is one of the possible ways.
> > But I was hoping to get a better understanding about the purpose of these
> > various classes or types of array , and more importantly what are the
> > drawbacks .
> >
> > Is there really no wiki page , tutorial, anything that provides an overview of
> > the collections and types of arrays that FPC has ?
>
> You can use dynamic arrays, they work like an ansi string:
>
> var
> VArray: array of TSomeClass;
> begin
> SetLength(VArray, 10);
> // now you have VArray[0] .. VArray[9];
> SetLength(VArray, 20);
> // now you have [0] .. [19];
> // Length(VArray) = 20
> // for I := 0 to Pred(Length(VArray)) is a valid statement
>
> They are reference counted, just like ansi strings, ie don't worry about
> memory leakages.
The detail that is not crystal clear to me is : after the first SetLength
and i set the first 3 elements , is it *guaranteed* that the
second SetLength
leaves those first 3 elements untouched ?
That's what i meant by "resize" as opposed to "reallocate" . Reallocation
could occur in some other place in memory , leading to loosing the
original contents. I have actually tested it with a small program, but since
i've been able to access indexes way beyond the allocated number of elements
before getting the program killed i want to be sure that i understand the
proper use of dynamic arrays.
Thanks Joao !
--
Adrian Maier
More information about the fpc-pascal
mailing list