Thema: Delphi Assigned

Einzelnen Beitrag anzeigen

Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#2

Re: Assigned

  Alt 26. Aug 2004, 11:42
Hallo,

Eine Membervariable einer Klasse ist von "Natur aus" nicht zugewiesen. D.h. Integers sind 0, Strings sind Leerstrings und Pointer sind nil, usw ...

Die Funktion Assigned überprüft jetzt, ob der Parameter <> nil ist.
Der Pointer OnFehler ist also am Anfang nil. Wenn er erstmalig zugewiesen wird, zeigt er nicht mehr auf nil, sondern irgendwo in den Speicher. Jetzt gibt Assigned(OnFehler) true zurück.

Nachdem du das nächste mal OnFehler nil zuweist, wird Assigned wieder false zurückgeben.

Wenn du jetzt allerdings ein erzeugtes Objekt mit Free freigibst, wird Assigned trotzdem true zurückliefer, weil der Pointer noch irgendwo in den Speicher zeigt.

z.B.
Delphi-Quellcode:
var Liste : TStringlist;
begin
  Liste := TStringlist;

  Liste.Free;

  if Assigned(Liste) then begin
    Liste.Add('abc'); //<-- hier gibts ne AV
  end;
end;
Deshalb sollte man statt .Free FreeAndNil() verwendet, weil es der Variable gleich nil zuweist.

Ich hoffe das war verständlich.

grüße, daniel

[EDIT] Hoppla, bei den Tags verklickt [/EDIT]
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat