AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Token erst zum Programmende wieder freigaben?
Thema durchsuchen
Ansicht
Themen-Optionen

Token erst zum Programmende wieder freigaben?

Ein Thema von CodeX · begonnen am 17. Feb 2014 · letzter Beitrag vom 17. Feb 2014
Antwort Antwort
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#1

Token erst zum Programmende wieder freigaben?

  Alt 17. Feb 2014, 00:40
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?
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Token erst zum Programmende wieder freigaben?

  Alt 17. Feb 2014, 00:48
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.
$2B or not $2B
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#3

AW: Token erst zum Programmende wieder freigaben?

  Alt 17. Feb 2014, 00:58
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.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Token erst zum Programmende wieder freigaben?

  Alt 17. Feb 2014, 01:28
Es gehört zu einem sauberen Programmierstil, das auch wieder aufzuräumen, was man angelegt hat.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#5

AW: Token erst zum Programmende wieder freigaben?

  Alt 17. Feb 2014, 04:44
Info:
http://jwscldoc.delphi-jedi.net/inde...rityToken.html

The token handle is closed on instance destroying if Shared is set to false.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Token erst zum Programmende wieder freigaben?

  Alt 17. Feb 2014, 09:05
Es gehört zu einem sauberen Programmierstil, das auch wieder aufzuräumen, was man angelegt hat.
Ganz besonders dann, wenn man sonst einen anderen Stil hat, wie in diesem Fall. CodeX hat ja geschrieben, dass alles nach der Benutzung sofort wieder freigegeben wird. Wenn man dann so eine Abweichung von seinem eigenen Standard hat und den Source nach längerer Zeit wieder ansieht, kommt man ins Grübeln, was (und warum) man da gemacht hat.
Peter
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#7

AW: Token erst zum Programmende wieder freigaben?

  Alt 17. Feb 2014, 14:41
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.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Token erst zum Programmende wieder freigaben?

  Alt 17. Feb 2014, 14:55
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.
Eine Instanz wird immer dort freigegeben, wo diese auch erzeugt wird.
initialization -> finalization ,
Create -> Destroy ,
OnShow -> OnClose .

Ausnahmen bestehen nur dort, wo das Lifetime-Management delegiert wird.
Delphi-Quellcode:
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
Geht man anders vor, so sollte man ganz genau wissen was da gerade macht (Referenzen auf nil setzen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (17. Feb 2014 um 14:59 Uhr)
  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 07: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