Hallo,
Zitat von
SirThornberry:
Mit Compilermagic geht einiges.
Zitat von
sirius:
Der Compiler muss halt einfach einmal mehr mitdenken und beim Aufruf von free die self-varaible als Referenz übergeben.
wie würdet ihr das - als Compilerbauer - im folgenden Fall lösen?
Delphi-Quellcode:
TDemoClass = class
private
...
public
property Control: TWhateverClass
read GetControl write SetControl;
end;
var
Instance : TDemoClass;
begin
...
Instance.Control.Free;
...
end;
Das Beispiel wirkt konstruiert, aber ähnliche Codestücke findet man in der
VCL.
Ein automatisch generiertes "Instance.Control := nil" nach dem Aufruf der Free-Methode funktioniert nur, wenn der Setter dies geeignet verarbeitet. Welchen Code soll der Compiler erzeugen, wenn kein Setter vorhanden ist?
Die Prozedur
FreeAndNil ist ein einfaches Werkzeug, mit dessen Hilfe der Programmierer eine Instanz freigeben und
eine zugehörige Referenz sicher löschen kann. Nur der Programmierer kann wissen, wann und wo das geschehen sollte, und ob eventuell weitere Referenzen existieren, die ebenfalls gelöscht werden müssen.
Gruß Hawkeye