AGB  ·  Datenschutz  ·  Impressum  







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

Freigabe von lokal erzeugten Objekten

Ein Thema von TiGü · begonnen am 9. Dez 2014 · letzter Beitrag vom 10. Dez 2014
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#1

Freigabe von lokal erzeugten Objekten

  Alt 9. Dez 2014, 13:49
Delphi-Quellcode:
...
   wicImage := TWICImage.Create();
...
Wer Create sagt, muss auch Free sagen!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Konvertieren eines TBitmap zu einem TPngImage tut später komische Dinge

  Alt 9. Dez 2014, 17:16
Jaja, vereinfachtes Beispiel und so.

In Wirklichkeit habe ich immer nach Alister Christie: Escaping the Try...Finally...Free Nest (http://www.youtube.com/watch?v=6Ob8fHtjSZI) lokal einen Speicherwächter der mir beim Verlassen der Methode die lokalen Objekte abräumt.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Konvertieren eines TBitmap zu einem TPngImage tut später komische Dinge

  Alt 10. Dez 2014, 10:24
Und wie räumst du auf, wenn eine Exception fliegt?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Konvertieren eines TBitmap zu einem TPngImage tut später komische Dinge

  Alt 10. Dez 2014, 10:51
Gar nicht, das macht der interface-referenzierte Speicherwächter.

Beispiel:
Delphi-Quellcode:
procedure noMemLeakHere();
var
   memGuard: IMemGuard;
   myLocalObject: TObject;
begin
   myLocalObject := TObject.Create();
   TMemGuard.Guard(memGuard, myLocalObject);

   // Wilde Dinge geschehen jetzt...

   // Wilde Dinge enden jetzt...
end;
Wenn eine Exception auftritt wird geht der Referenzzähler von memGuard auf Null und er wird abgeräumt. Und in seinem Destruktor zerstört er auch myLocalObject .

Schau dir das Video am besten mal an, ist Schritt für Schritt super erklärt
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Konvertieren eines TBitmap zu einem TPngImage tut später komische Dinge

  Alt 10. Dez 2014, 12:12
Ah, okay...habe nur mit einen halben Auge und ohne Ton drüberspult und mir fiel die Sache ab Minute 18:00 auf.
Wunderte mich das keine MessageBox mit "Three" kam, aber beim zweiten Anschauen mit Ton wird es klar...er kommt ja gar nicht erst zum Create des dritten Objects.

Das ist eigentlich ganz schön clever.
Lohnt sich das auch sonst für nur eine Objekt-Erzeugung?
Ich habe kaum verschachtelte try-finallys in meinen Code (gefunden).
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Konvertieren eines TBitmap zu einem TPngImage tut später komische Dinge

  Alt 10. Dez 2014, 12:21
Ein Beispiel was ich den Zusammenhang auch immer sehe ist die Sanduhr: Mauszeiger auf Sanduhr setzen, Dinge tun und sich durch diese Technik sicher sein, dass der Cursor, auch im Exception-Fall, automatisch wieder auf "Normal" zurückgesetzt wird.

Ich bin aber kein Freund davon:
Siehe http://www.delphipraxis.net/180596-h...ml#post1260998

Ich benutze es wirklich nur wenn ich mehr als ein Objekt lokal erzeuge und freigeben muss. Gibt neben den beiden sicher noch mehr Anwendungsfälle.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:55 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