Es kann sein, daß der Compiler die Variable tmpBumsList direkt als Result für GetNewGuidList verwendet.
Nein, das ist bestimmt so.
Gemanagete Typen als Result werden in einen Var-Parameter umgewandelt.
Aus
function GetNewGuidList: IGuidList;
macht der Compiler ein
procedure GetNewGuidList(var Result: IGuidList);
.
Da das Feld nicht direkt übergeben werden kann (bzw. er zu doof dafür ist), wird automatisch eine temporäre Variable generiert.
Der Code des Compilers sieht also so aus
Delphi-Quellcode:
constructor TDings.Create;
var
tmpBumsList: IGuidList;
{$REGION 'AUTOGENERATED'}
AutogeneratedVariable1: IGuidList;
{$ENDREGION}
begin
{$REGION 'BEGIN'}
tmpBumsList := nil;
AutogeneratedVariable1 := nil;
try
{$ENDREGION}
inherited Create;
TFactory.GetNewGuidList(tmpBumsList);
// tmpBumsList.RefCount = 1
TFactory.GetNewGuidList(AutogeneratedVariable1);
Self.fBumsList := AutogeneratedVariable1;
// fBumsList.RefCount = 2
{$REGION 'END'}
finally
tmpBumsList := nil;
AutogeneratedVariable1 := nil;
end;
{$ENDREGION}
end;