Variablen vom Typ eines dynamischen Arrays sind bereits Pointer.
Zwei wichtige Sachen müssen beachtet werden:
- Jedes dynamische Array hat einen Referenzzähler, fällt dieser auf 0 werden die Daten des Arrays freigegeben.
- Der Inhalt des Arrays kann nachräglich verändert werden. Weisen mehrere Pointer oder Variablen auf das selbe Array, verändern sich die Daten für alle.
Delphi-Quellcode:
uses
Types, Contnrs;
procedure PushByteDynArray(AQueue: TQueue; const AValue: TByteDynArray);
procedure PopByteDynArray(AQueue: TQueue; var AValue: TByteDynArray);
implementation
procedure PushByteDynArray(AQueue: TQueue; const AValue: TByteDynArray);
var
p: Pointer;
begin
{wichtig, Delphi versucht bei der Zuweisung eines anderen dyn. Arrays
den Referenzzähler des bisher zugewiesenen dyn. Arrays zu verringern}
p := nil;
{eindeutige Kopie erzeugen und Referenzzähler auf 1 setzen}
TByteDynArray(p) := Copy(AValue);
AQueue.Push(p);
end;
procedure PopByteDynArray(AQueue: TQueue; var AValue: TByteDynArray);
begin
{für den bisherigen Inhalt Referenzzähler -1 , eventuell freigeben}
AValue := nil;
{der Cast verhindert die Referenzzählung}
Pointer(AValue) := AQueue.Pop;
end;