AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Destructor abbrechen

Ein Thema von archimedix · begonnen am 6. Feb 2022 · letzter Beitrag vom 9. Feb 2022
Antwort Antwort
Seite 1 von 2  1 2      
archimedix

Registriert seit: 17. Jul 2011
18 Beiträge
 
Delphi 10.4 Sydney
 
#1

Destructor abbrechen

  Alt 6. Feb 2022, 09:31
Delphi-Version: 10.4 Sydney
Hallo, weiß jemand, ob bzw. wie man einen Destruktor "abbrechen" kann?
Soll heißen, den Destruktor verlassen, ohne dass der eigentliche Destruktor-Code zum Freigegeben des Objekts ausgeführt wird.

Der Programmfluss sollte nach dem Aufruf regulär weiterlaufen, also kein Abort o.ä.

Geändert von archimedix ( 6. Feb 2022 um 09:36 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.017 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Destructor abbrechen

  Alt 6. Feb 2022, 10:38
Ich würde mal vermuten, dass das nicht geht, um einen davor zu schützen, hier einen schweren konzeptionellen Fehler zu machen. Wenn man etwas freigeben möchte, möchte man etwas freigeben.

Erstell eine Methode CanDestroy oder so (ähnlich wie TForm.CanClose) und rufe die auf.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#3

AW: Destructor abbrechen

  Alt 6. Feb 2022, 11:27
Natürlich geht es nicht mehr im Destroy, bzw. ich kenne eh keinen Grund, warum man das machen will.

Wenn du schon mitten im Freigeben bist, dann kann bereits etwas teilweise freigegeben sein (weißt du ja nicht, wie die Vererbung vor/nach dir aussieht) und somit wäre die Instanz eh nicht mehr voll funktionsfähig.



Aber Delphi-Referenz durchsuchenBeforeDestruction



"Regulär" mit Exceptions an einer unnötigen Stelle?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Feb 2022 um 11:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.347 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Destructor abbrechen

  Alt 6. Feb 2022, 15:43
Ich hielte es für sinnvoller, wenn du etwas zum Hintergrund schreibst. Ich bin mir sicher, dass es in jedem Fall eine bessere Lösung gibt, selbst wenn es so ginge wie du dir das vorstellst.

Vorsichtig werfe ich einmal Interfaces in den Raum. Ein referenzgezähltes Objekt kannst du über Interfaces realisieren, so dass es automatisch freigegeben wird, wenn niemand mehr eine Referenz darauf hat. Du kannst also z.B. die Interface-Referenz weiterliefern und in dann "vergessen", freigegeben wird sie aber erst, wenn sie der "Empfänger" nicht mehr nutzt.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Destructor abbrechen

  Alt 7. Feb 2022, 16:49
@archimedix beschreibe doch mal bitte den gesamten Geschäftsablauf. Ich glaube du verzettelst dich da, wenn den den Freigabe-Prozess abbrechen willst.
Diese sollte am besten gar nicht erst eingeleitet werden.

Vor allem, wie stellst du dir den Abbruch vor? Soll eine Exception ausgelöst werden oder soll das Object einfach nur "bleiben".
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Destructor abbrechen

  Alt 7. Feb 2022, 17:32
Hallo, weiß jemand, ob bzw. wie man einen Destruktor "abbrechen" kann?
Soll heißen, den Destruktor verlassen, ohne dass der eigentliche Destruktor-Code zum Freigegeben des Objekts ausgeführt wird.
Kurze Antwort: nein, die lange möchtest du nicht wissen
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Destructor abbrechen

  Alt 7. Feb 2022, 18:00
Hallo, weiß jemand, ob bzw. wie man einen Destruktor "abbrechen" kann?
Man ruft nicht .Free oder ähnliches auf.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Destructor abbrechen

  Alt 7. Feb 2022, 18:26
Vielleicht noch ein Erklärungsversuch:

Der Destructor gibt nicht das Objekt bzw. den Speicherplatz frei, sondern ruft nur eine eingeschobene Aufräummöglichkeit an, um Abhängigkeiten u.ä. zu bereinigen. Wenn man das abbricht verzichtet man nur auf das Bereinigen von Abhängigkeiten.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
archimedix

Registriert seit: 17. Jul 2011
18 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Destructor abbrechen

  Alt 7. Feb 2022, 18:50
Alles klar, danke für die zahlreichen Antworten!
Normalerweise ist es Unsinn, einen Destruktor abbrechen zu wollen, stimme ich voll zu.

Ich brauchs für eine Art Hack, an dem ich bastel, wo ich Non-Delphi-Klassen (aus DLL, zugänglich über C-sytle API) als Delphi-Klassen, verwenden möchte und jetzt versuche, das einigermaßen safe zu machen.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: Destructor abbrechen

  Alt 9. Feb 2022, 06:53
Ich brauchs für eine Art Hack, an dem ich bastel, wo ich Non-Delphi-Klassen (aus DLL, zugänglich über C-sytle API) als Delphi-Klassen, verwenden möchte und jetzt versuche, das einigermaßen safe zu machen.
Du hast also vermutlich eine spezielle Klasse in Delphi, von der du ableitest und nutzt diese dann als Wrapper für die Objekte aus der DLL?
Eventuell kannst du FreeInstance überschreiben - das ist die Methode, die letztlich den Speicher frei gibt. (siehe System.pas TObject.FreeInstance).
Ohne genau zu wissen, wie dein Hack funktioniert kann ich aber nicht sagen ob das so ohne weiteres was taugt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 9. Feb 2022 um 06:56 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:37 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