[C] atexit - nützlich oder unsauber?

Z

Zico

Lebende Foren Legende
Hi Leute


Hab mal ne eher generelle Frage zum Thema atexit().
Diese lautet: Ist es sehr nützlich sie einzusetzen oder eher unsauber?
Sicher ist dies eine Frage des *wie* aber im generellen sehe ich Vor- und Nachteile.

Zum einen ist der Vorteil, dass, wenn ich mein Programm "abschließe", trotzdem alles perfekt aufgeräumt wird(Speicher freimachen etc). Zum anderen habe ich mit atexit aber auch nicht so sher die Kontrolle darüber, in welcher Reihenfolge, die ganzen atexit's aufgerufen werden.
Ich sitz hier vor einem relativ komplexen Code, der dutzende solcher Aufrufe besitzt und je nachdem welcher Aufruf nun zuerst erfolgt, wird am Ende das ganze ggf. in einer flaschen Reihenfolge aufgerufen.

Natürlich könnte ich auch alle mit vorherigen atexit Funktionen in EINER Funktion abhandeln, die dann per atexit aufgerufen wird...
Sprich: Lösungen habe ich für mein Problem, doch würde ich gern wissen, was ihr allgemein über atexit denkt. Also ob ihr es eher nützlich oder unsauber findet oder bis zu welchem Grad abhängig vom Aufbau/Komplexität des Programms oder Anhand der Implementation.
 
Zuletzt bearbeitet:
Hallo,

ich versuche es zuerst immer mit 'keep it simple'. Bisher habe ich 'atexit()' noch nicht eingesetzt, aber es könnte für mich in einem Zusammenhang interessant werden, der der Intention des Beispiels im Handbuch der 'GNU C Library', '25.6.3 Cleanups on Exit', sehr nahe kommt:

Meine Bibliothek stellt eine Datenbankschnittstelle für eine Reihe von Programmen zur Verfügung. Diese Programme melden sich beim regulären Beenden bei der Bibliothek ab -, aber soll man wirklich unterstellen, daß jedes Programm immer regulär beendet wird? Würde die Bibliothek nach der Beendigung des letzten Programms geschlossen, könnte diese dabei die Datenbankverbindung geregelt herunterfahren, ohne dies von einem Client-Zähler abhängig zu machen.

Vermutlich stellen 'atexit()' oder 'on_exit(...)' hierfür die besten Lösungen dar.
 
Hallo :)

Auch wenn die Antwort etwas spät kommt sag ich dennoch "Danke" für die Erklärung. Mittlerweile bin ich zu einem ähnlichen Schluss gelangt. atexit() bietet definitiv Vorteile, wenn ich es auch versuch enicht mehr zu exzessiv einzusetzten. Mein Programm ist in diverse Subsysteme gegliedert, welche ich auch weiterhin mit atexit() behandle, wobei ich aber nun versuche Abhängigkeiten zwischen diesen (welche durch atexit() falsch gelöst werden könnten) regulär zu handhaben.
 
Zurück
Oben