Ich habe mich gerade gefragt, warum die meisten Delphi-Beispiele FillChar() zum Initialisieren von Datensätzen verwenden.
type
TFoo = record
i: Integer;
s: string; // not safe in record, better use PChar instead
end;
const
EmptyFoo: TFoo = (i: 0; s: '');
procedure Test;
var
Foo: TFoo;
s2: string;
begin
Foo := EmptyFoo; // initialize a record
// Danger code starts
FillChar(Foo, SizeOf(Foo), #0);
s2 := Copy("Leak Test", 1, MaxInt); // The refcount of the string buffer = 1
Foo.s = s2; // The refcount of s2 = 2
FillChar(Foo, SizeOf(Foo), #0); // The refcount is expected to be 1, but it is still 2
end;
// After exiting the procedure, the string buffer still has 1 reference. This string buffer is regarded as a memory leak.
Hier ( http://stanleyxu2005.blogspot.com/2008/01/potential-memory-leak-by-initializing.html ) ist meine Anmerkung zu diesem Thema. IMO, deklarieren eine Konstante mit Standardwert ist ein besserer Weg.