![]() |
AW: Warum zerstören sich meine Classen
Der GC macht ja nichts anderes als .Free aufzurufen, wenn keine Instanzen mehr vorhanden sind. Wenn du jetzt den Referenzzähler nicht benutzt, brauchst du eine Methode, die zumindest intern .Free aufruft. Du kannst aber auch das Free über dein Interface nach außen geben.
Bernhard |
AW: Warum zerstören sich meine Classen
Zitat:
Mit TInterfacedPersistent wird jetzt kein Destroy mehr aufgerufen. Wie muss die Funktion Free also aussehen? gruss |
AW: Warum zerstören sich meine Classen
.Free ist eine Methode deines OBJEKTES und diese Methode existiert weiterhin. Da sie in TObject definiert worden ist, sollte es kein Problem sein, diese zu verwenden.
Was sie macht: Nach einer Prüfung, ob das Objekt überhaupt existiert, wird Destroy veranlasst. Bernhard |
AW: Warum zerstören sich meine Classen
Zitat:
Deshalb auch meine Frage. gruss |
AW: Warum zerstören sich meine Classen
Natürlich hast du immer ein Objekt, da man Klassen nur ableiten kann und die Grundklasse, die immer dabei ist ist TObjekt.
Du kannst dir das wie eine Hierarchie vorstellen und an der Spitze steht immer TObject. Bernhard |
AW: Warum zerstören sich meine Classen
Zitat:
Das wollte ich gerne wissen. Wenn ich Free nach außen weiterleite muss die Anwendung doch wissen was sie damit tun soll.. Bzw auf was sie verzweigt. gruss |
AW: Warum zerstören sich meine Classen
Falsche Richtung.
Delphi-Quellcode:
So war das gemeint. Du sollst nicht das Objekt irgendwo hin geben, sondern wo anders die Möglichkeit anbieten, das Objekt zu löschen.
type
IMyInterface = interface(IUnknown) public // ... procedure Free; end; Bernhard |
AW: Warum zerstören sich meine Classen
Zitat:
Es reicht in meiner Classe ein einfaches procedure Free zu deklarieren? Und die ruft dann Tobject vom Interface TInterfacedPersistent auf.
Delphi-Quellcode:
type
ISkinGrid = interface ['{89A97429-5E4B-43B6-87D8-381DD4E8CF21}'] function GetHandle: hWnd; property Handle: hWnd read GetHandle; procedure Free; end; Hmm etwas unverständlich. Ja ich lerne es noch mit den Interfacen. EDIT: Es funktioniert auf jedenfall. Danke für eure Hilfe! gruss |
AW: Warum zerstören sich meine Classen
So grob stimmt das. Du definierst ein Free in deinem Interface und schon ist es zugänglich. Free ist bei deinem Objekt schon definiert und zieht mit deinem TInterfacedPersistent ein (passiert auch bei TInterfacedObject). Free sorgt dafür, dass das Objekt verschwindet. Heißt also: Von außen Free aufrufen und weg ist das Objekt.
Bernhard ADD: Eben so, als würdest du das Objekt vor dir haben. |
AW: Warum zerstören sich meine Classen
Zitat:
Überlege nun ob ich alle Interface nach TInterfacedPersistent umlege. Das verhindert zumindest das sie selbst zerstört werden. In wie weit sich das jetzt auf Speicher usw.. bemerkbar macht weiss ich allerdings nicht. Denke da könnte einiges zusammen kommen wenn diese während der laufzeit nicht freigegeben werden. Da ist eure Meinung gefragt. :) gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 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