Ganz genau. Der Destruktor wird auch immer ausgeführt, auch wenn der Konstruktor scheiterte, z.B. eine
Exception auftritt.
Ich habe aber gerade gesehen, dass mein destructor nicht (explicit) ? aufgerufen wird, wenn ich nur Foo.Free; habe. Erst wenn ich ein override; hinter dem Destructor habe, wird dieser mit Free aufgerufen.
Ich mach das immer so, dass ich bereits beim erstellen der Destructor-Methode mit dem Code-Insight arbeite. Einfach zwischen
TFoo=class
und
end;
STRG+Leertaste, Exec eingeben, dann steht das schon Execute, und mit Enter bestätigen. Code-Insight erstellt die Destuctor-Methode gleich korrekt und legt auch den Public-Abschnitt gleich mit an, wenn nötig.
Spart Zeit und man kann das unscheinbare override nicht vergessen (passierte mir früher regelmäßig).
Übrigens: mit Shift+CTRL+C wird werden auch die Methoden gleich im Implementation-Abschnitt erstellt.
Leider klappt das mit dem Constructor nicht ganz so komfortabel.