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)