Speicher freigeben - OnDestroy?
-
hi. ist OnDestroy des hauptformular wirklich geeignet für das freigeben von speicher? es wird zwar in der hilfe beschrieben das dies so sei, aber ich weiss ja nicht. mir scheint OnClose komischerweise zuversichtlicher. wo sollte man nun am besten speicher wieder freigeben wenn die anwedung beendet wird?
welche reihenfolge wird eigentlich eingehalten? erst OnClose und dann OnDestroy? theoretisch müsste das ja so sein oder? Da ja bei OnClose die anwendung beendet wird und dann noch das event OnDestroy aufruft um sich selber zu zerstören. Oder doch umgekehrt?
-
Hallo
OnClose kommt natürlich vor OnDestroy. Allerdings sind wohl beide Events für Speicherfreigaben von Heap-Objekten, die die ganze Laufzeit (und nur die) des Forms gültig sein sollen, ungeeignet. Irgendwann hatten wir mal einen Thread dazu, aber den finde ich gerade nicht.
Nimm für Speicherfreigaben in solchen Fallen immer den Destrucktor des Forms (denn du natürlich erst selber in die automatisch generierten Formklasse eintragen must).
Oder benutzt z.B. std::auto_ptr, um dich nicht um manuelles Freigeben kümmern zu müßen.bis bald
akari
-
wie genau deklariert man im VCL stil einen destructor? scheint nicht so üblich zu sein wie bei einer normalen C++ klasse.
header
class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); virtual ~TForm1(TComponent* Owner); };*.cpp
virtual TForm1::~TForm1(TComponent* Owner) { }
-
Hallo
Header
__fastcall ~TForm1();Implementation
__fastcall TForm1::~TForm1() { }bis bald
akari
-
danke. kann man in einem destructor auch andere nicht-auufräum-arbeiten durhcführen lassen? z.B. das schreiben in eine datei etc.? also sachen die nur dann benötigt werden, wenn das programm beendet wird.
-
Hallo
ja. Du must nur aufpassen, wenn du andere Variablen/Objekte aus einem Destruktor aufrufen willst, das diese immer noch gültig sind. Solange du also auf rein interne, gesicherte Sachen zugreifst (wie die zu dem Form gehöhrenden Komponenten) kannst du alles machen. Also auch Dateien bearbeiten.
bis bald
akari
-
nur eins noch

wieso ist der selbst erstellte destructor besser als das event OnDestroy? also wo genau liegen die vorteile?
-
Hallo
das liegt daran, das nicht 100% klar ist, wann und wie OnDestroy wirklich aufgerufen wird.
Dazu gab es wie gesagt einen Thread dazu, aber ich find den nicht mehr. Vielleicht haben ja die anderen hier im Forum ein besseres Gedächtniss als ich...bis bald
akari
-