Überprüfen, ob Formular gelöscht wurde



  • Hi,

    folgendes Szenario:
    Ich habe mehrere Zeiger für ein Formular erstellt.
    Anfangs adressiere ich diese alle auf NULL.
    Darauf werden mehrere Formulare dynamisch allokiert.
    Jetzt wird eines der Formulare geschlossen.
    Dass ich keinen Speicherzugriffsfehler erhalte, muss ich aber wissen, welches Formular gelöscht wurde, da beim Terminieren der Applikation nochmal auf sämtliche dynamisch allokierte geöffnete Formulare zugegriffen wird.

    Kann ich den Zeiger auf den das zu schließende Formular zeigt auf NULL setzen, nachdem es geschlossen wurde? Das muss meiner Meinung nach vom Destruktor des zu schließenden Formulars ausgehen, aber ich weiß nicht genau, wie ich das realisieren soll.

    Jemand eine Idee?



  • Ich hab's jetzt, denke ich, hinbekommen.

    Ist die Methode denn "zulässig" bzw. korrekt?

    //Destruktor des zu schließenden Formulars
        Release(); //Speicherplatz wird freigegeben
        frmOption->notiz[dynSaveNr]=NULL; //der Zeiger, der auf das eben geschlossene Formular zeigt, wird auf NULL adressiert (ist das ok?)
    


  • Hallo

    Wie du schon geschrieben hast, muß der Destruktor des Forms den dazugehörigen Zeiger auf 0 setzen. Alles was dazu nötig ist, ist, das die Formklasse die Deklaration des Zeiger kennt, notfalls über include. Möglich wäre auch der Formklasse einen Zeiger auf den Zeiger als Member zu geben, dann kann beim Erstellen des Forms der zu löschende Zeiger zugewiesen werden und die Datenkapselung bleibt erhalten.

    /Edit : Antwort auf zweiten Post : Die erste Zeile ist nicht nur unnötig, sondern sogar falsch. Komplett rausnehmen. Die zweite Zeile ist in Ordnung, soweit das anhand des Auszugs nachzuvollziehen ist.

    bis bald
    akari



  • Vielen Dank für die schnelle Antwort.
    Weshalb ist das "Releasen" unnötig und falsch? Wird der Speicher anders überhaupt freigegeben?
    Oder soll ich den Speicher mit "delete" freigeben, wenn die Applikation beendet wird?



  • Hallo

    TForm::Release ruft u.a. den Destruktor auf, und deshalb darf es nicht mehr innerhalb des Destruktors aufgerufen werden. Wenn du im Destrzktor bist, dann ist es für Release schon zu spät.

    bis bald
    akari


Anmelden zum Antworten