Hallo,
Alle von TObject abgeleiteten Klassen können per Free freigegeben werden ohne das es zu einer
Exception kommt falls das entprechende Objekt nicht instanziert wurde/nil ist. Ich möchte selbst ein Free implementieren ohne diese Eigenschaft zu verlieren.
Bisher habe ich folgenden Code
Delphi-Quellcode:
TMyList =
class(TList)
protected
FDoSomething : boolean;
public
destructor Destroy;
override;
procedure Free(DoSomething : boolean);
reintroduce;
end;
destructor TMyList.Destroy;
begin
if FDoSomething
then
begin
...
do something...
end;
inherited;
end;
procedure TMyList.Free(DoSomething: boolean);
asm
TEST EAX,EAX
JE @@exit
MOV ECX,[EAX]
MOV
DL,1
CALL dword ptr [ECX].vmtDestroy
@@exit:
end;
Den Assembler-Code habe ich mir von TObject kopiert ohne wirklich zu wissen was er macht (wobei man die ersten beiden und letzten beiden Zeile ja erahnen kann). Das funktioniert auch soweit.
Falls der Parameter "DoSomething" der Methode "Free" gesetzt (wahr) ist soll in "Destroy" entsprechend reagiert werden.
Was ich jetzt nicht weiß ist wie ich meine Objektvariable in "Free" entsprechend dem Parameter setzen kann.
Falls jemand eine Idee hat oder mir sagen kann wo ich sowas nachlesen kann oder einen einfacheren Ansatz hat würde ich mich freuen :lol:
(Die Variable vor dem Aufruf von "Free" per property zu setzen würde sicher auch gehen, daß wollte ich aber vermeiden damit der Programmieren das nicht vergessen kann)
Ciao