Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.499 Beiträge
Delphi 12 Athens
|
AW: Array korrekt freigeben
Gestern, 07:59
Du hast Recht, ich habe mich geirrt, beide Compiler erzeugen das selbe Ergebnis.
Variablen von managed Types werden durch Finalize() auf nil gesetzt.
Andere Variablen behalten den vorherigen Inhalt.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TMyRecord = record
A: Integer;
B: String;
C: IInterface;
D: array of String;
E: array[0..2] of Char;
procedure Clear;
procedure Ausgabe;
end;
procedure TMyRecord.Clear;
begin
Finalize(Self); // für Strings, Interfaces, Array usw.
FillChar(Self, SizeOf(Self), 0);
end;
procedure TMyRecord.Ausgabe;
begin
Writeln(' A: Integer Value: ', IntToStr(A));
Writeln(' B: String Value: "', B, ' "');
Writeln(' C: IInterface Assigned: ', Assigned(C));
Writeln(' D: array of String Assigned: ', Assigned(D));
Writeln(' E: array[0..2] of Char Value: ["', E[0], ' ", "', E[1], ' ", "', E[2], ' "]');
end;
var
m1, m2: TMyRecord;
begin
try
m1.A := 100;
m1.B := IntToStr(m1.a);
m1.C := TInterfacedObject.Create;
SetLength(m1.D, 3);
m1.D[0] := ' A';
m1.D[1] := ' B';
m1.D[2] := ' C';
m1.E[0] := ' A';
m1.E[1] := ' B';
m1.E[2] := ' C';
m2 := m1;
m1.Ausgabe;
Writeln;
Writeln(' Finalize(m1)');
Finalize(m1);
Writeln;
m1.Ausgabe;
readln;
except
on E: Exception do
Writeln(E.Classname, ' : ', E. Message);
end;
end.
|
|
Zitat
|