Destruktor für main



  • gibt es einen destruktor für main()??

    oder muss ich mir selber eine art "clean-up" funktion um speicher wieder freizugeben, etc.



  • Da main nur ne Funktion ist, und keine Klasse, hat's auch keinen Dtor. Und ja, räum deinen Müll selber wieder auf.



  • sah nur so aus als würde er nicht alles aufräumen.
    weil er die sachen aus main(). erst nach der geschweiften klammer nach dem return freigibt.

    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	DoMainStuff();
    
    	_CrtDumpMemoryLeaks();
    
    	return 0;
    }
    

    hab nun also die anweisungen in eine funktion DoMainStuff gepackt.
    dann werden mir die noch nicht aufgeräumten sachen nicht mehr als leaks angezeigt 😃



  • asr schrieb:

    weil er die sachen aus main(). erst nach der geschweiften klammer nach dem return freigibt.

    Yo, dann werden die belegten Ressourcen vom OS freigegeben.



  • asr schrieb:

    sah nur so aus als würde er nicht alles aufräumen.
    weil er die sachen aus main(). erst nach der geschweiften klammer nach dem return freigibt.

    Ist ja auch richtig so, da sie erst dort ihre Gültigkeit verlieren. Mit dem Ende von main() ist das Programm übrigens nicht sofort zuende. Die C-Bibliothek macht dann noch verschiedenste Aufräumarbeiten, es werden Destruktoren von statischen Objekten gerufen etc.. Genauso ist main() auch nicht der direkte Einsprungpunkt deiner Anwendung, sondern wird von der C-Bibliothek aus aufgerufen, nachdem sich diese initialisiert hat.



  • Um Missverständnissen vorzubeugen:

    Objekte und Variablen, die als auto-Storage nach der { von main deklariert wurden, werden natürlich erst beim } von main auch wieder zerstört. Alles was allerdings dynamisch angefordert wurde, wird keineswegs am Ende von main zerstört, sondern kurz danach durch das Betriebssystem. Da das natürlich fürchterlich unsauber ist, müssen wir selbstverständlich VOR dem Ende von main schon selbst aufgeräumt haben!

    (Gilt natürlich für jeden dynamisch angeforderten Speicher im gesamten Verlauf des Programms, wobei am ehesten gilt: Aufräumen sobald der Müll nicht mehr gebraucht wird)



  • LordJaxom schrieb:

    Alles was allerdings dynamisch angefordert wurde, wird keineswegs am Ende von main zerstört, sondern kurz danach durch das Betriebssystem.

    Das kann, muss aber nicht so sein. Der Standard legt dies zumindest nicht fest. Deshalb

    LordJaxom schrieb:

    Da das natürlich fürchterlich unsauber ist, müssen wir selbstverständlich VOR dem Ende von main schon selbst aufgeräumt haben!


Anmelden zum Antworten