![]() |
Im Class Destructor alle Strings leer
Ist wahrscheinlich einfach nur zu spät für mich, aber ich kann sonst nicht einschlafen.
Folgende Klasse:
Delphi-Quellcode:
Und folgende Anwendung mit einem TButton auf dem Formular:
TStatic = class
private class var FInt: integer; class var FStr: string; class constructor Create; class destructor Destroy; public class procedure ShowMe; end;
Delphi-Quellcode:
Es kompiliert und gibt keine Warnungen, aber warum kennt der Destruktor meinen String nicht mehr und wie kann ich korrekt auf ihn zugreifen? :(
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject); begin TStatic.ShowMe; // Ausgabe: "7Hallo" - GUT! end; { TStatic } class constructor TStatic.Create; begin FStr := 'Hallo'; FInt := 7; TStatic.ShowMe; // Ausgabe: "7Hallo" - GUT! end; class destructor TStatic.Destroy; begin TStatic.ShowMe; // Ausgabe: "7 " - WARUM? end; class procedure TStatic.ShowMe; begin ShowMessage(IntToStr(FInt) + FStr); end; |
AW: Im Class Destructor alle Strings leer
Schätze mal, der String ist schon futsch d.h. freigegeben.
|
AW: Im Class Destructor alle Strings leer
Hallo,
ich habe zwar denn Sinn eines Class Constructors (erst recht eines Class Destructors) noch nicht ganz verstanden, aber ![]() "You do not have to declare a class destructor if you declare a class constructor, and vice versa." "They do not have to be called Create and Destroy." Dafür wird es schon Gründe geben. |
AW: Im Class Destructor alle Strings leer
Ist so gewollt.
Siehe: |
AW: Im Class Destructor alle Strings leer
Ist leider alles noch etwas "verbugt", bzw. blöde geplant.
Sei froh, daß der Destructor in deinem 2010 überhaupt aufgerufen wird. (Anfangs hatte man es glatt vergessen) Wobei es hier einen Hack gibt, denn wie man an FInt sieht, sind Pointer davon natürlich nicht betroffen. (ein PString + ![]() |
AW: Im Class Destructor alle Strings leer
Danke für eure Antworten.
@Peter1999, die beiden genannten Hinweise haben nichts mit meinem Problem zu tun. Trotzdem gut zu wissen. :stupid: Hm, das ist natürlich unvorteilhaft, dass das so by-Design ist. Ändere ich aber
Delphi-Quellcode:
zu
FStr: string;
Delphi-Quellcode:
funktioniert es, ein
FStr: PChar;
Delphi-Quellcode:
zeigt keine Meldungen. Spricht was dagegen?
ReportMemoryLeaksOnShutdown := true;
|
AW: Im Class Destructor alle Strings leer
Zitat:
Kommt aber drauf an, wie/was du mit diesem PChar gemacht hast. |
AW: Im Class Destructor alle Strings leer
Das das 'by Design' ist, ist doch krank.
Ich habe im Instanz-Destruktor doch auch noch Zugriff auf die Feldinhalte, wieso sollte das bei einem Class Destructor nicht so sein? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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