![]() |
Token erst zum Programmende wieder freigaben?
Ggf. lässt sich meine Frage auch ganz allgemein auf Pointer, Objekte etc. ausweiten. Aber ich formuliere das mal als konkreten Fall.
Grundsätzlich achte ich immer darauf, alles direkt nach der Verwendung wieder sauber freizugeben. Allerdings frage ich mich ob es in diesem Fall nicht auch etwas geschickter geht: Ich verwende in meiner Anwendung regelmäßig und an vielen Stellen ein bestimmtes Token (TJwSecurityToken), das sich während des gesamten Programmablaufs nicht ändert. Muss ich dieses tatsächlich bei jeder Verwendung neu erzeugen und freigeben oder kann ich es auch einfach bei Initialisierung der Anwendung global erzeugen und es während der gesamten Programmausführungszeit nutzen? Müsste das in dem Fall bei Programmende überhaupt noch manuell freigegeben werden oder wird es durch das Programmende ohnehin freigegeben? Sollte es technisch i.O. sein, gibt es sonstige Nachteile, dies so zu handhaben? |
AW: Token erst zum Programmende wieder freigaben?
Den finalization-Abschnit am Ende der Units kennst zu aber?
Einfach dort, wo die Variable für die globale Instanz rumliegt, diese am Ende freigeben. |
AW: Token erst zum Programmende wieder freigaben?
Ja, kenne ich. :)
Meine Frage ist eher, ob etwas dagegenspricht, das so zu tun. Bzw. als Nebenfrage, ob das manuelle Freigeben dann überhaupt notwendig ist, wenn bei Programmende ohnehin automatisch alles wieder freigegeben wird. |
AW: Token erst zum Programmende wieder freigaben?
Es gehört zu einem sauberen Programmierstil, das auch wieder aufzuräumen, was man angelegt hat.
|
AW: Token erst zum Programmende wieder freigaben?
Info:
![]() The token handle is closed on instance destroying if Shared is set to false. |
AW: Token erst zum Programmende wieder freigaben?
Zitat:
|
AW: Token erst zum Programmende wieder freigaben?
Vielen Dank für Eure Antworten!
Ich schlussfolgere: 1. Es ist OK, ein Token (Zeiger, Objekt, etc.) bei Programmstart global zu erzeugen, sodass er während der gesamten Ausführungszeit zur Verfügung steht. 2. Auch wenn bei Programmende alles, was erzeugt wurde, automatisch freigegeben wird, ist es stilistisch besser, dies im Finalization block selbst zu tun. |
AW: Token erst zum Programmende wieder freigaben?
Zitat:
Delphi-Quellcode:
->
initialization
Delphi-Quellcode:
,
finalization
Delphi-Quellcode:
->
Create
Delphi-Quellcode:
,
Destroy
Delphi-Quellcode:
->
OnShow
Delphi-Quellcode:
.
OnClose
Ausnahmen bestehen nur dort, wo das Lifetime-Management delegiert wird.
Delphi-Quellcode:
Geht man anders vor, so sollte man ganz genau wissen was da gerade macht (Referenzen auf nil setzen)
TComponent.Create( AOwner ); // der Owner kümmert sich um die Freigabe
TObjectList.Add( TObject.Create ); // die Liste kümmert sich um die Freigabe, wenn OwnsObjects var MyInterface : IInterface; MyInterface := TInterfacedObject.Create; // der Referenzzähler kümmert sich um die Freigabe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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