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]