Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Generics - Memory Leak wenn constructor ohne inherited Create

  Alt 8. Mär 2019, 17:53
Das bringt immer wieder die armen Benutzer von TList<T> bzw. TObjectList<T> zur Verzweiflung.

Wenn du in deinem parameterlosen Konstruktor Create einfach sagst inherited dann ruft er den parameterlosen Konstruktor der Oberklasse auf.


Schau mal: Hat TObjectList<TMyItem> denn einen? Nein, hat es nicht! Es hat einen mit einem Parameter den man weglassen kann. Wenn du sagst inherited Create() dann füllt der Compiler den optionalen Parameter für dich aus und der richtige Konstruktor mit dem optionalen Parameter wird aufgerufen.

Der Konstruktor mit "wirklich keine Parameter" ist der von TObject. Definitiv der falsche.


Das Problem manifestiert sich auch an ganz anderen Stellen (z.B. wenn du eine TList<T> de-serialisieren willst), es wurde schon x mal an Embarcadero herangetragen, aber die meinen alles ist as designed
  Mit Zitat antworten Zitat