![]() |
Freigabe von lokal erzeugten Objekten
Zitat:
Delphi-Quellcode:
sagt, muss auch
Create
Delphi-Quellcode:
sagen! :warn::zwinker:
Free
|
AW: Konvertieren eines TBitmap zu einem TPngImage tut später komische Dinge
Jaja, vereinfachtes Beispiel und so. ;-)
In Wirklichkeit habe ich immer nach Alister Christie: Escaping the Try...Finally...Free Nest ( ![]() |
AW: Konvertieren eines TBitmap zu einem TPngImage tut später komische Dinge
Und wie räumst du auf, wenn eine Exception fliegt?
|
AW: Konvertieren eines TBitmap zu einem TPngImage tut später komische Dinge
Gar nicht, das macht der interface-referenzierte Speicherwächter.
Beispiel:
Delphi-Quellcode:
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
procedure noMemLeakHere();
var memGuard: IMemGuard; myLocalObject: TObject; begin myLocalObject := TObject.Create(); TMemGuard.Guard(memGuard, myLocalObject); // Wilde Dinge geschehen jetzt... // Wilde Dinge enden jetzt... end;
Delphi-Quellcode:
.
myLocalObject
Schau dir das Video am besten mal an, ist Schritt für Schritt super erklärt :thumb: |
AW: Konvertieren eines TBitmap zu einem TPngImage tut später komische Dinge
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). |
AW: Konvertieren eines TBitmap zu einem TPngImage tut später komische Dinge
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 ![]() 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. :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 Uhr. |
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