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
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

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

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 11:43
Es hängt ja nicht daran, wo was ist und für was es verwendet werden soll, sondern wie die Typen gebraucht werden. Für ein Interface gibt es einen automatischen Referenzzähler (also ein Garbage Collector für Delphi, der funktioniert). Dieser funktioniert allerdings nur dann korrekt, wenn man keine Objekt-Typen mehr verwendet, sondern nur noch Interface-Typen.

2. Stoplerstein: Wenn ein Interface keiner Variablen mehr zugeordnet ist, dann heißt das automatisch, dass das Interface weg muss (Garbage Collector). Dazu im Gegensatz das Nicht-Interface-Objekt: Das verschwindet erst, wenn jemand explizit Free (Destroy) aufgerufen hat.

Bernhard

PS: Hoffe, alles nochmal zusammengefasst und richtig dargestellt zu haben.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 11:58
Es hängt ja nicht daran, wo was ist und für was es verwendet werden soll, sondern wie die Typen gebraucht werden. Für ein Interface gibt es einen automatischen Referenzzähler (also ein Garbage Collector für Delphi, der funktioniert). Dieser funktioniert allerdings nur dann korrekt, wenn man keine Objekt-Typen mehr verwendet, sondern nur noch Interface-Typen.

2. Stoplerstein: Wenn ein Interface keiner Variablen mehr zugeordnet ist, dann heißt das automatisch, dass das Interface weg muss (Garbage Collector). Dazu im Gegensatz das Nicht-Interface-Objekt: Das verschwindet erst, wenn jemand explizit Free (Destroy) aufgerufen hat.

Bernhard

PS: Hoffe, alles nochmal zusammengefasst und richtig dargestellt zu haben.
Danke das habe ich jetzt verstanden.

Wie Uwe schon sagt...
Zitat:
Sorry, aber deine Art mit Klassen, Interfaces und Handles zu hantieren ist irgendwie, sagen wir "unüblich".

Er hat schon recht aber letztendlich zählt das ergebnis wie man dahin kommt ist eine andere sache.
Ich verwende jetzt TInterfacedPersistent obwohl mir der unterschied nicht geläufig ist abgesehen davon das sie keinen Referenzzähler hat
Damit funktioniert es.

Wie muß ich das nun korrekt freigeben?
Bedeutet das ich müßte eine Free Methode nach außen weiterleiten?


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
 
#3

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
 
#4

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
 
#5

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
 
#6

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
 
#7

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
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 08:28 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