Zitat von
Stevie:
Und nur Konstruktoren für Records (wenn auch nur parametrisierte) und keine Destruktoren, halte ich für inkonsequent.
Dabei muß es garnicht so schwer sein sowas zu implementieren.
Delphi-Quellcode:
procedure test;
var x: TMyRecord;
begin
end;
FinalizeRecord wird hier doch eh immer beim END; aufgerufen, solange entsprechende Teile (Strings, dyn. Array oder Interfaces) enthalten sind.
Und genau da könnte man leicht auch einen Record-Destructor integrieren ... einfach nur wie einen virtuellen Datentypen in der
RTTI des Records.
http://qc.embarcadero.com/wc/qcmain.aspx?d=82524
Da es sowas aber nicht in Delphi gibt.
Uber den obengenannten Typen kann man grundsärtlich erstmal jeden Record-Pointer in ein Interface umwandeln.
Wenn die Records solche Constructoren/Destructoren hätten, dann könnte man sie qusa als eine Mischung aus Interface und Objekt ansehn.
Schnelle Funktionsaufrufe über statische Prozeduren (wie bei Objekten ohne die ganzen virtuellen Prozeduren und ohne den Verwaltungsoverhead der Vererbungshirachie.
Und dennoch automatische Freigaben, wie bei Interfaces.