Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Problem mit FastReports und kaputt gehendem Interface

  Alt 19. Feb 2023, 19:36

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.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat