sagen wir es mal so
ein Leerstring entspricht bei einem String/WideString/AnsiString/UnicodeString einem NIL
(wie schon jbg sagte, ist das der Normalzustand ... und wer daran rumbastelt, hat mit den Konsequenten zu leben)
sobald Inhalt vorhanden ist, wird Speicher reserviert und er zeigt auf diesen Speicher
am Referenzzähler kann man sogar noch viel mehr erkennen ... z.B.
> ist es eine Variable oder eine Konstante (nicht zu verwechseln mit Const-Parameter)
> wenn es eine Variable ist, wie oft wird sie in diesem Moment verwendet
ich nutze dieses manchmal gerne aus
z.B. wollen ja einige
WinAPI-Strukturen entweder NIL oder Inhalt
(z.B. bei den OpenDialogen)
Delphi-Quellcode:
A = Record A.P = PChar
// also statt
FillChar(A, Size, 0);
if S <> '' then A.P := PChar(S);
// oder
if S <> '' then
A.P := PChar(S)
Else
A.P := nil;
// einfach nur
A.P := Pointer(S);
ABER PChar(s) zeigt immer auf Speicher,
da dieses keine Typkonvertierung darstellt, sondern eine virtuelle Funktion der Compiler-Magic
Delphi-Quellcode:
Function PChar(const s: String): PChar;
Const i: Integer = 0;
Begin
If S <> '' Then Result := Pointer(S) Else Result := @i;
End;