AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Warum zerstören sich meine Classen
Thema durchsuchen
Ansicht
Themen-Optionen

Warum zerstören sich meine Classen

Ein Thema von EWeiss · begonnen am 21. Mär 2011 · letzter Beitrag vom 23. Mär 2011
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#11

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 12:01
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 12:07
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
Ja verstehe ich nur "Free" muss ja irgendetwas machen.

Mit TInterfacedPersistent wird jetzt kein Destroy mehr aufgerufen.
Wie muss die Funktion Free also aussehen?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#13

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 12:11
.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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 12:20
.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
Sorry ich habe kein TObject sondern TInterfacedPersistent.
Deshalb auch meine Frage.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#15

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 12:26
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 12:35
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
Procedure Free: TObject; ?

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
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#17

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 12:41
Falsche Richtung.

Delphi-Quellcode:
type
  IMyInterface = interface(IUnknown)
  public
    // ...
    procedure Free;
  end;
So war das gemeint. Du sollst nicht das Objekt irgendwo hin geben, sondern wo anders die Möglichkeit anbieten, das Objekt zu löschen.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 13:04
Falsche Richtung.

Delphi-Quellcode:
type
  IMyInterface = interface(IUnknown)
  public
    // ...
    procedure Free;
  end;
So war das gemeint. Du sollst nicht das Objekt irgendwo hin geben, sondern wo anders die Möglichkeit anbieten, das Objekt zu löschen.

Bernhard
Sorry wenn ich nochmal blöd frage..
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

Geändert von EWeiss ( 9. Jul 2019 um 08:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#19

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 14:04
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.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 14:14
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.
Danke für deine Erklärung..
Ü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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 03:35 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