Speicher freigeben



  • Hallo an alle,
    ich habe in der Klasse von einer TForm zusätzliche Zeiger deklariert, für diese allociere ich dann in mehreren Funktionen mit "new" Speicher.
    Jetzt habe ich irgendwann mal gelernt, daß ich diesen Speicher spätestens im Destruktor wieder freigeben sollte. Meines Wissens existieren Forms jedoch während der kompletten Laufzeit des Programmes und dementsprechend sollte der Speicher ja nach Programmende wieder automatisch freigegeben werden. Ob das "schön" ist???
    Meine Frage ist jetzt, muß ich denn Speicher wieder explizit freigeben und wenn ja, wie und wo mache ich das am besten?

    Gruß Alex



  • Das mit der Freigabe ist so eine Sache: Wenn dein Programm beendet wurde ist es ja nicht mehr im Speicher, deine Pointer also auch nicht; Nur während der Laufzeit könnte es dann einen leichten Overhead geben (aber wirkliche Geschwindigkeitsprobleme solltest du wohl erst ab wesentlich mehr Pointern erwarten).

    Gib die Pointer einfach, wenn du sie nicht mehr brauchst, mit delete oder delete[] wieder frei; dann bist du zumindest auf der sicheren Seite 😃



  • Hallo

    Meines Wissens existieren Forms jedoch während der kompletten Laufzeit des Programmes

    Nur im Normalfall. Denn es ist in etwas komplexeren Programmen üblich, TForm-Instanzen dynmisch und manuell zu erstellen und wieder zu löschen, bevor das eigentliche Programm beendet wird.
    Es ist definitiv besser, wenn du dir angewöhnst, eigene Instanzen immer korrekt zu löschen. Auch von TForm kannst du einen Destruktor (muß __fastcall sein) erstellen und so aufräumen.
    Um dir diese Aufgabe abzunehmen, kannst du übrigens std::auto_ptr<> nehmen.
    Damit wird das Löschen der Instanz automatisiert. Siehe
    http://www.cppreference.com/cppmisc/auto_ptr.html

    bis bald
    akari



  • Danke für eure Antworten,
    ich werde in zukünftigen Projekten, darauf achten ob ich Forms wieder freigeben kann. Im jetzigen Fall entscheide ich mich dafür, dies dem Automatismus zu überlassen, da ich die Werte in den Zeigern in anderen Klassen ebenfalls benötige.

    Gruß Alex


Log in to reply