AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Destructor in TClass

Ein Thema von Jelly · begonnen am 17. Feb 2004 · letzter Beitrag vom 17. Feb 2004
Antwort Antwort
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#1

Destructor in TClass

  Alt 17. Feb 2004, 10:43
Hallo,

habe ein kleines Verständisproblem zu meinem Destructor in einer aus TObject abgeleiteten Klasse... hier mal bischen Quelltext:

Delphi-Quellcode:
type
  TLogFile = class
  private
     FLogname : string ;
     FZeitstempel : boolean ;
     LF : textfile ;
  public
     constructor Create (Logfilename : string ; const MitZeitstempel : boolean = false) ;
     destructor destroy ; override ;
  end ;

var
 log : TLogFile ;

implementation
uses dialogs, sysutils ;

{ TLogFile }

constructor TLogFile.Create (Logfilename : string ; const MitZeitstempel : boolean = false) ;
begin
     { ... der klappt, deshalb ausgeklammert }
end;

destructor TLogFile.Destroy ;
begin
     try
       try
          showmessage ('Destroy Log') ;
          closefile (LF) ;
       except
       end ;
     finally
        inherited Destroy ;
     end ;
end;
Jetz wird aber, wenn ich über log.free versuche die Klasse wieder frei zu geben, mein Destructor nicht aufgerufen... Wie kann das sein.

Im übrigen versteh ich auch nicht so recht, was überhaupt in TObject passiert... folgende Zeile sind da implementiert:
Delphi-Quellcode:
destructor TObject.Destroy;
begin
end;

procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;
Also wenn mich da nicht alles täuscht, wird durch den Aufruf log.free mein neuer Destructor Destroy aufgerufen. Mit dem Aufruf inherited Destroy wird dann der aus TObject noch ausgeführt, WO NICHTS DRIN STEHT... Mich würd mal interessieren, wo denn jetzt überhaupt der Speicher freigegeben wird... TObject ist doch die Basisklasse, oder irre ich mich da.

Vielen Dank schon mal für bisch *LichtinTunnelbringen*

Gruß,
Tom
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Destructor in TClass

  Alt 17. Feb 2004, 11:00
Ok... mein erstes Problem hat sich geklärt. Es lag nicht an der Klassenimplementierung, sondern weil ich aus Versehen 2. mal log:=TLogFile.Create('datei.log');
aufgerufen hab... Daher der Trouble im Destructor beim Aufruf von log.free ;

2. Frage beschäftigt mich aber immer noch, da nirgendswo der Speicher wirklich freigegeben wird... Irgendwo muss das doch in TOBject stehen?

Gruß,
Tom
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#3

Re: Destructor in TClass

  Alt 17. Feb 2004, 11:14
Der Speicher für die Instanz wird nicht innerhalb des Codes in Create/Destroy erzeugt bzw. freigegeben, sondern unsichtbar vom Compiler über implizite Aufrufe von NewInstance/FreeInstance. (Das hängt noch von einem zweiten unsichtbaren Parameter ab (zusätzlich zu Self), ein Boolean, der vom Compiler auf True gesetzt wird, wenn man z.B.Instanz := TInstanzklasse.Create; aufruft.)
Rufst Du Create mit einem bestehenden Objekt oder inherited auf, ist dieser Parameter auf False gesetzt, und Create verhält sich wie eine normale Methode, es wird keine neue Instanz erzeugt.

Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Destructor in TClass

  Alt 17. Feb 2004, 11:25
Ja, aber irgendwo in einer .pas Datei muss doch der Code stehen, der jetzt den OS sagt, daß er den Speicher wieder freigeben soll? Ich blick da nicht so recht durch.

Tom
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#5

Re: Destructor in TClass

  Alt 17. Feb 2004, 11:27
Das macht der Compiler implizit mit FreeInstance selbst, ohne, dass Du was davon siehst.

Gruß, teebee
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Destructor in TClass

  Alt 17. Feb 2004, 11:39
Delphi-Quellcode:
destructor TLogFile.Destroy ;
begin
  try
    showmessage ('Destroy Log') ;
    closefile (LF) ;
  except
  end ;
  inherited;
end;
so wäre dein code richtig
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Destructor in TClass

  Alt 17. Feb 2004, 11:54
Zitat von teebee:
Das macht der Compiler implizit mit FreeInstance selbst, ohne, dass Du was davon siehst.
Ja dann kann ich das ja nirgends finden
vielen Dank für klare Ausage.

Gruß,
Tom
  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 11:14 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