Gtkmm - vor Gtk::Main::run() beenden



  • Hallo.

    Meine Frage ist einfach und kurz, jedoch finde ich keine Methode etc. dazu:

    Ich möchte meiner gtkmm-Anwendung sagen, dass sie sich beenden soll, noch bevor Gtk::Main::run() erreicht wurde.

    Gibt es dazu eine Methode oder ähnliches? std::abort() möchte ich wenn möglich nicht einsetzen.



  • So?

    #include <cstdlib>
    
    #include <gtkmm.h>
    
    int main(int argc, char **argv) {
      Gtk::Main m(argc, argv);
    
      std::exit(1);
    
      Gtk::Window w;
      m.run(w);
      return 0;
    }
    


  • Manchmal ist die Lösung so einfach, dass man sie einfach nicht findet -.-

    Trotzdem danke.



  • exit ist böse in C++



  • böse schrieb:

    exit ist böse in C++

    Bei diesem Fall kann man imo die potentiellen Probleme nicht abgebauter Objektinstanzen usw. getrost beiseite schieben. Zur Not bleibt auch noch atexit.



  • Warum nicht einfach return? 🙄



  • hä? schrieb:

    Warum nicht einfach return? 🙄

    Weil ich das vielleicht auch in einer Funktion *ausserhalb* von main() einbauen will?

    Zu den anderen:
    Smart-Pointer beheben dieses Problem, oder irre ich mich da?



  • The-Kenny schrieb:

    hä? schrieb:

    Warum nicht einfach return? 🙄

    Weil ich das vielleicht auch in einer Funktion *ausserhalb* von main() einbauen will?

    Zu den anderen:
    Smart-Pointer beheben dieses Problem, oder irre ich mich da?

    Na ja, bei meinem obigen Code wird z.B. die 'm'-Instanz nicht abgebaut.
    Ebenso würden Smart-Pointer den allokierten Speicherplatz auch nicht freigeben können. D.h. man muss schon aufpassen, wie und wo man exit in C++ einsetzt. Mit etwas Umsicht ist die Geschichte aber nicht so wild.

    EDIT: Der Speicher wird nach Beendigung (oder Absturz 😉 ) des Programms eh vom Betriebssystem wieder freigegeben (also sowohl Stack als auch Heap-Objekte werden aus dem Speicher entfernt).


Anmelden zum Antworten