AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Methode "Free" selbst implementieren (Assembler-Problem?)
Thema durchsuchen
Ansicht
Themen-Optionen

Methode "Free" selbst implementieren (Assembler-Problem?)

Ein Thema von VizeTE · begonnen am 22. Feb 2005 · letzter Beitrag vom 15. Mär 2005
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Methode "Free" selbst implementieren (Assemble

  Alt 22. Feb 2005, 14:26
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...

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#12

Re: Methode "Free" selbst implementieren (Assemble

  Alt 22. Feb 2005, 14:29
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.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

Re: Methode "Free" selbst implementieren (Assemble

  Alt 22. Feb 2005, 14:31
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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#14

Re: Methode "Free" selbst implementieren (Assemble

  Alt 22. Feb 2005, 14:36
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.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#15

Re: Methode "Free" selbst implementieren (Assemble

  Alt 22. Feb 2005, 14:39
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..
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#16

Re: Methode "Free" selbst implementieren (Assemble

  Alt 22. Feb 2005, 14:47
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)
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#17

Re: Methode "Free" selbst implementieren (Assemble

  Alt 22. Feb 2005, 14:54
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?
  Mit Zitat antworten Zitat
Benutzerbild von retnyg
retnyg

Registriert seit: 11. Feb 2005
193 Beiträge
 
#18

Re: Methode "Free" selbst implementieren (Assemble

  Alt 22. Feb 2005, 15:15
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;
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#19

Re: Methode "Free" selbst implementieren (Assemble

  Alt 22. Feb 2005, 15:15
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?
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)
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#20

Re: Methode "Free" selbst implementieren (Assemble

  Alt 22. Feb 2005, 15:22
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)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz