Zitat von
Robert Marquardt:
Deine Vorstellung von Free ist falsch. Es ruft Destroy auf, aber ein Mehrfachaufruf wird nicht abgefangen.
Was (mit Hilfe von Compilermagie) abegefangen wird ist das bei a.Free der Aufruf unterbleibt falls a = nil ist.
Ich glaub eher deine vorstellung ist falsch
Was solld daran bitte magie sein? :
Delphi-Quellcode:
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
Wie soll der compiler auch wissen wann a = nil ist? er optimiert vielleicht unsinnige aufrufe, aber sonst auch nix!
Self = a da self der unsichtbare data-pointer ist. Also macht es keinen unterschied ob ich
a.free;
schreibe, oder ob ich
if a<>nil then a.destroy;
mache!
Zitat:
Es ruft Destroy auf, aber ein Mehrfachaufruf wird nicht abgefangen.
Mehrfach nicht, aber da destroy virtuell ist in gewisser weise schon
mâxîmôv.
{KDT}