Talking about dynamic arrays I was just curious if we could us the new management operators to make dynamic arrays that are managed on the stack.
Here’s a quick demo I typed up but I don’t understand why the init/dealloc count isn’t balanced. Calling the constructor seems to be the culprit, but why? type generic TDynArray<T> = record private type TDynArrayTable = array[0..0] of T; private type TDynArrayTablePtr = ^TDynArrayTable; private table: TDynArrayTablePtr; public constructor Create (values: array of T); procedure Push(value: T); class operator Finalize(var a: TDynArray); class operator Initialize(var a: TDynArray); end; constructor TDynArray.Create (values: array of T); var value: T; begin for value in values do Push(value); end; class operator TDynArray.Initialize(var a: TDynArray); begin writeln('init'); a.table := nil; end; class operator TDynArray.Finalize(var a: TDynArray); begin FreeMem(a.table); a.table := nil; writeln('dealloc'); end; procedure TDynArray.Push(value: T); begin if table = nil then table := GetMem(0); writeln('push ', value); // grow array etc... end; procedure TestDynArray; type TIntArray = specialize TDynArray<Integer>; var d: TIntArray; begin d := TIntArray.Create([1, 2, 3]); d.Push(100); end; ======== init init dealloc push 1 push 2 push 3 push 100 dealloc dealloc Regards, Ryan Joseph _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal