Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#9

Re: Prüfen, ob String ein Wert hat. Was ist schneller???

  Alt 5. Sep 2009, 00:33
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat