Zu Interfaces also Const Parameter: vermutlich wird da der Referenzzähler dann nicht
hochgesetzt...
Ja, sobald const verwendet wird kommt es nicht zur Erhöhung des Referenzzählers (und das ist gut so). Ausserdem wird kein try..finally generiert.
Es ist aber nicht notwendig, nun jedes const vor einem Interface-Parameter zu entfernen. Es gibt nur eine Konstellation, bei der das const zu einem Fehler führt:
Angenommen diese Methode soll verwendet werden:
procedure Frob(const Grob: IGrobber);
Dann kommt es zu einem Fehler bei der Referenzzählung wenn sie so aufgerufen wird:
Frob(TGrobberImplementer.Create);
Dies dagegen funktioniert:
Delphi-Quellcode:
grob := TGrobberImplementer.Create;
Frob(grob);
(Beispiele aus: "Should I not pass an interface as const?" -
https://stackoverflow.com/a/31028671/80901)
Ich verwende generell const für Interface-Parameter, und achte einfach nur darauf, immer erst eine Instanz zu erstellen und diese dann zu übergeben.
Da sich fehlerhafte Referenzzählung unter anderem zu nicht freigegebenen Objekten führen kann, verwende ich ausserdem das gute alte ReportMemoryLeaksOnShutdown := True.