Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Methode "Free" selbst implementieren (Assembler-Problem?) (https://www.delphipraxis.net/40867-methode-free-selbst-implementieren-assembler-problem.html)

sakura 22. Feb 2005 14:26

Re: Methode "Free" selbst implementieren (Assemble
 
Zitat:

Zitat von VizeTE
Wäre es denn ok wenn ich den Parameter einen Defaultwert geben und mein Free somit wie das ursprüngliche Free aufgerufen werden kann? Wäre zwar nicht ganz in meinem Sinne aber, in meinen Augen, ein funktionierender Kompromiß.

Auch das kann und wird wahrscheinlich im Laufe der Nutzung zu schwerz nachvollziehbaren Ausnahmefehlern führen. Free, genau wie auch Destroy ist eine der wenigen Methoden deren Parameter man nicht ändern soll/darf. Wozu muss mein beim Freigeben überhaupt Parameter überreichen. Entweder das Objekt ist schon tot oder es wird abgeknippst, keine weiteren Optionen...

...:cat:...

VizeTE 22. Feb 2005 14:29

Re: Methode "Free" selbst implementieren (Assemble
 
Es ging mir darum, daß eventuell an das Object angehangene Objekte ebenfalls freigegeben werden oder auch nicht. Je nachdem, ob diese noch benötigt werden/an andere Stelle referenziert sind.

MaBuSE 22. Feb 2005 14:31

Re: Methode "Free" selbst implementieren (Assemble
 
Zitat:

Zitat von VizeTE
Es ging mir darum, daß eventuell an das Object angehangene Objekte ebenfalls freigegeben werden oder auch nicht. Je nachdem, ob diese noch benötigt werden/an andere Stelle referenziert sind.

Dann sollte auch die "einfache" Lösung (s.o.) für Dich ausreichend sein.

VizeTE 22. Feb 2005 14:36

Re: Methode "Free" selbst implementieren (Assemble
 
Zitat:

Zitat von MaBuSE
Dann sollte auch die "einfache" Lösung (s.o.) für Dich ausreichend sein.

Das wollte ich vermeiden da man es einfach vergesssen könnte. (Besonders wenn jemand die Klasse nutzt der sie nicht entworfen hat. Woher soll der denn wissen das es dieses property gibt. Wegen einem Free sieht man ja, wie gesagt, nicht extra in die Dokumentation.

Dax 22. Feb 2005 14:39

Re: Methode "Free" selbst implementieren (Assemble
 
Dann setze dir doch ein Flag in der Klasse, sobald du irgendwas erstellst, das wieder freigeben werden muss. Dieses Flag fragst du dann im Destruktor ab und reagierst dann entsprechend..

VizeTE 22. Feb 2005 14:47

Re: Methode "Free" selbst implementieren (Assemble
 
Zitat:

Zitat von Dax
Dann setze dir doch ein Flag in der Klasse, sobald du irgendwas erstellst, das wieder freigeben werden muss. Dieses Flag fragst du dann im Destruktor ab und reagierst dann entsprechend..

Das wäre sicher eine Möglichkeit. Wahrscheinlich wird es auch darauf hinauslaufen wenn das mit dem eigenen Free so problematisch ist. Ich wollte dies nur vermeiden um dem vergessen des Flags vorzubeugen. (siehe einige Posts vorher)

Dax 22. Feb 2005 14:54

Re: Methode "Free" selbst implementieren (Assemble
 
Wenn du das Flag in der Klasse beim setzen einer Eigenschaft setzt, hast du dieses Problem schon gelöst ;) Was schon getan ist, kann man ja nicht mehr vergessen :) Oder hab' ich was falsch verstanden? :gruebel:

retnyg 22. Feb 2005 15:15

Re: Methode "Free" selbst implementieren (Assemble
 
weiss zwar nicht was da standardmässig in eax steht aber so könnte es gehen:

Delphi-Quellcode:
procedure dosomething;
begin
  showmessage('parameter wurde an free übergeben');
end;

procedure TObject.Free(myparam:boolean); stdcall;
asm
        TEST   EAX,EAX
        JE     @@exit
        MOV    ECX,[EAX]
        CALL   dword ptr [ECX].vmtDestroy
        pop eax
        cmp eax, 1 
        jne @@exit
        call dosomething
@@exit:
end;

VizeTE 22. Feb 2005 15:15

Re: Methode "Free" selbst implementieren (Assemble
 
Zitat:

Zitat von Dax
Wenn du das Flag in der Klasse beim setzen einer Eigenschaft setzt, hast du dieses Problem schon gelöst ;) Was schon getan ist, kann man ja nicht mehr vergessen :) Oder hab' ich was falsch verstanden? :gruebel:

Prinzipiell nicht falsch. Aber ist gibt halt Situationen wo gleiche Vorgänge unteschiedlich behandelt werden. Wenn ich zum Beispiel an zwei Objecte ein drittes "andocke" (an beiden das selbe) und das erste Objekt freigeben darf ich das angedockte Objekt nicht freigeben wenn ich es am zweiten Objekt noch benötige. (also identische Andockvorgänge aber zwei unterschiedliche Abdockvorgänge) Wie gesagt prinzipiell würde es gehen aber ich muß halt immer an das setzen des Flags denken. (was ich vermeiden wollte)

VizeTE 22. Feb 2005 15:22

Re: Methode "Free" selbst implementieren (Assemble
 
Zitat:

Zitat von retnyg
weiss zwar nicht was da standardmässig in eax steht aber so könnte es gehen:

Sorry, den Name DoSomething war wohl nicht besonders gut gewählt. Sollte eine Variable sein und von daher auch vor Destroy gesetzt werden da in Destroy darauf reagiert werden soll. (wenn ich den Assembler-Code richtig interpretiert habe)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz