Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Destruktor wird nicht aufgerufen (https://www.delphipraxis.net/114493-destruktor-wird-nicht-aufgerufen.html)

jjep 26. Mai 2008 13:28


Destruktor wird nicht aufgerufen
 
Hallo zusammen

Ich habe in meinem Programm die Klasse TTest definiert, in dieser Klasse befindet sich auch der Destruktor...

Delphi-Quellcode:
type
  TTest = class(TObject)
  public
    constructor create();
    destructor destroy();
  end;
um ein Objekt des Typs TTest zu schliessen, benutze ich den Aufruf "free". Dieser sollte ja destroy aufrufen, wenn das Objekt nicht nil ist. Doch der Haltepunkt in destroy wird nie erreicht.

Wieso wird mit free nicht destroy aufgerufen?
Wieso ist das Objekt nach dem Aufruf von free nicht nil?

Danke vielmals
jjep

oki 26. Mai 2008 13:35

Re: Destruktor wird nicht aufgerufen
 
Hi,

so sollte es klappen:
Delphi-Quellcode:
type
  TTest = class(TObject)
  public
    constructor create();
    destructor destroy(); override;
  end;
Im Destructor Inherited nicht vergessen.

Gruß oki

DeddyH 26. Mai 2008 13:35

Re: Destruktor wird nicht aufgerufen
 
Eigentlich sollte der Destruktor schon aufgerufen werden. Und dass Dein Objekt anschließend nicht nil ist, liegt am Aufruf. Nimm statt Free einmal FreeAndNil.

mkinzler 26. Mai 2008 13:36

Re: Destruktor wird nicht aufgerufen
 
Zitat:

Wieso wird mit free nicht destroy aufgerufen?
Wie sieht Destroy aus?
Zitat:

Wieso ist das Objekt nach dem Aufruf von free nicht nil?
Die Klasse kennt die Referenzvariablen ja nicht. Deshalb kann sie diese auch nicht auf Nil setzen ->
Delphi-Quellcode:
FreeAndNil( <Referenz>);

jjep 26. Mai 2008 13:47

Re: Destruktor wird nicht aufgerufen
 
Ja logisch override vergessen :wall:

Zitat:

Delphi-Quellcode:
 destructor destroy(); override;


Super! FreeAndNil war genau das, was ich gesucht habe!!

Zitat:

Delphi-Quellcode:
 FreeAndNil( <Referenz>);


:dp: Danke an Alle


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 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