Das was man dort sieht ist die übliche Vorgehensweise für die
thread-safe und
lock-free Erstellung einer (hier globalen) Instanz.
Mit
TInterlocked
könnte man das noch etwas übersichtlicher gestalten:
Delphi-Quellcode:
class function TEncoding.GetUnicode: TEncoding;
var
LEncoding: TEncoding;
begin
if FUnicodeEncoding = nil then
begin
LEncoding := TUnicodeEncoding.Create;
try
LEncoding := TInterlocked.CompareExchange<TEncoding>(FUnicodeEncoding, LEncoding, nil);
finally
LEncoding.Free;
end;
end;
Result := FUnicodeEncoding;
end;