Die Warnungen für managed variablen sind etwas irreführend.
Managed typen werden (fast) immer initialisiert das muss man nicht manuell machen, im Gegenteil, bei managed records kann eine Initialisierung sogar beliebig Komplexität hinzufügen. In FPC 3.2.x ist die Initialisierung über Default allerdings auch broken das wenn man die warning loswerden will man potentiell mehr kaputt macht.
Die Ausnahme für die Initialisierung (oben das "fast immer") ist für dynamische arrays und strings die das result einer Funktion sind, diese werden nicht initialisiert.
Code: Alles auswählen
function foo: String;
begin
Result += 'A';
end;
var s: String;
begin
s:=foo; // A
s:=foo; // AA
s:=foo; // AAA
writeLn(s);
end.
Managed records werden hingegen korrekt initialisiert.
Bzg SetLength als Initialisierung, der Grund dafür ist das SetLength den parameter als "var" und nicht als "out" behandelt.