AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Objekte in Klassen: Was wird alles zerstört?
Thema durchsuchen
Ansicht
Themen-Optionen

Objekte in Klassen: Was wird alles zerstört?

Ein Thema von malo · begonnen am 27. Nov 2005 · letzter Beitrag vom 27. Nov 2005
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#1

Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 01:18
Hi!

Ich habe eine kleine Frage... Ich habe mehrere Klassen in meinem Projekt. Diese haben verschiedene Objekte als Felder/Properties. Und diese Objekte haben auch wieder Objekte etc.

Daher ist meine Frage: Wenn ich die Klasse zerstöre, die alle anderen Objekte beinhaltet: Was wird dabei automatisch zerstört? Muss ich noch irgendwas selber freigeben?

Ein einfacher Beispielcode ist sowas hier:
Delphi-Quellcode:
type TKlasseA = class
    a: integer; //irgend ein Feld, ist ja egal, was es genau ist
  end;
  TKlasseB = class
    KlasseA: TKlasseA;
  end;
  TSuperKlasse = class
    KlasseB: TKlasseB;
  end;
So in etwa, vom Prinzip her.

Wenn ich jetzt ein Objekt der Klasse "TSuperKlasse" zerstöre: Werden dann KlasseA und KlasseB auch gleich mit zerstört? Oder muss ich da noch auf irgendwas aufpassen?
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 01:21
Eine Klase als Field ist nichts weiteres als ein Pointer. Wenn du die Speicher dafür reservierst, dann musst du es selber wieder freigeben.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#3

Re: Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 01:34
Für solche Aufgaben gibt es den Destructor Der ist dafür verantwortlich, den angelegten Speicherplatz wieder freizugegeben.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#4

Re: Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 11:33
Zitat von jim_raynor:
Für solche Aufgaben gibt es den Destructor Der ist dafür verantwortlich, den angelegten Speicherplatz wieder freizugegeben.
Das ist mir schon klar. Die Frage war nur, was alles von alleine freigegeben wird, und was ich selbst machen muss. Ich dachte, da gäbe es vielleicht auch irgendeine Compiler-Optimierung oder sowas...
Der Hintergrund ist jetzt speziell auch der, dass ich beim Debuggen auf eine Objektfreigabe gestoßen bin, die eine Exception auslöst. Und da wollte ich das zuerst einmal geklärt haben, damit ich diesbezüglich keinen Murks mache
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 11:41
Solange es keine wirkliche Garbage Collection in Delphi gibt, kann der Compiler ja nicht wissen, ob das Feld die einzige Referenz auf das Objekt ist. Also musst du selbst entscheiden, ob das Objekt freigegeben werden kann.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 11:52
Vielleicht hilfts ja ...

Objekte die du selbst über Quellcode zum Leben erweckst, mußt Du in der Regel auch selbst wieder sterben lassen.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#7

Re: Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 12:18
Komisch finde ich nur, dass ich im Destructor von "TSuperKlasse" nicht auf KlasseA und KlasseB zugreifen kann. Das bringt mir eine Exception... Woanders geb ich die eigentlich nicht frei. DEshalb ist das sehr verwirrend.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 12:22
Hm Du solltest im Destructor von SuperKlasse auch nur Klasse B freigeben (mit Free), dadurch wird der Destructor der Klasse B aufgerufen wo Du dann Klasse A freigeben kannst.

Poste doch mal den Code, womit Du Probleme hast, dann kann man sicher leichter helfen.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#9

Re: Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 12:25
Zitat von GuenterS:
Hm Du solltest im Destructor von SuperKlasse auch nur Klasse B freigeben (mit Free), dadurch wird der Destructor der Klasse B aufgerufen wo Du dann Klasse A freigeben kannst.
Aber ich krieg auch eine Exception, wenn ich KlasseB freigeben will. Das ist das seltsame...

Zitat von GuenterS:
Poste doch mal den Code, womit Du Probleme hast, dann kann man sicher leichter helfen.
Wollte ich eigentlich auch machen, allerdings sitze ich grade am falschen Rechner und hab keinen Zugriff auf meine Sourcen. Daher hab ich versucht das Problem mit meinem Beispiel oben zu beschreiben. Wenn ich wieder an meinem PC bin, werd ich den entspr. Source posten
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Objekte in Klassen: Was wird alles zerstört?

  Alt 27. Nov 2005, 12:29
Wenn du von TComponent abgeleitet hast wird dein Object freigegeben wenn der Owner freigegeben wird (falls du einen angegeben hast beim Create). Wenn du Komponenten frei gibst wo andere Komponenten drauf liegen so werden auch die Childs freigegeben (dann wird dein Control also freigegeben wenn es mindestens von TControl abgeleitet ist und auch einen Parent zu gewiesen bekommen hat). Alles andere musst du selbst freigeben sofern du es auch angelegt hast. Es schadet allerdings nicht auch Komponenten explizit freizugeben selbst wenn sie einen Owner haben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 04: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