Objekt als letztes zerstören
-
Ich möchte, dass ein statisches Objekt als letztes im Programm zerstört wird.
Es geht darum, dass ich Memory Leaks finden möchte und deshalb dieses Objekt als letztes zerstört wird (also der Destruktor aufgerfufen wird), damit ich dann alle möglichen Leaks finden kann.
-
Hi,
Wo ist die Fragestellung? Wo ist das Problem ein Objekt am Ende seines Programms
zu zerstoeren?mfg
v R
-
virtuell Realisticer schrieb:
Wo ist das Problem ein Objekt am Ende seines Programms
zu zerstoeren?so einfach ist das nicht:
du hast statische objekte - deren destruktionsreihenfolge nicht feststeht.Alexandrescu beschreibt in Modern C++ Design wie man das loesen kann -> du kannst dir auch mal Loki ansehen, da ist es implementiert.
Ein Singleton soll als letzter destruiert werden:
also arbeiten wir mit der funktion
atexit()
da kann man funktionen registrieren, die beim beenden des programmes aufgerufen werden sollen (wir registrieren also funktionen die die objekte dann destruieren)problem ist:
dein objekt muss als erster registriert werden, damit es als letztes zerstoert wird.das wird damit umgangen, dass wir eine art priority stack bauen.
wir registrieren die funktion nicht bei atexit() sondern bei unserem 'handler'
diese handle verwaltet alle funktionen und registriert sich selbst bei atexit()
beim beenden wird nun der handler aufgerufen, und je nach prioritaet zerstoert er die objekte in richtiger reihenfolge.das ist ein monster - aber anders leider nicht machbar (zumindest kenn ich keine andere loesung :()
-
Shade Of Mine schrieb:
virtuell Realisticer schrieb:
Wo ist das Problem ein Objekt am Ende seines Programms
zu zerstoeren?so einfach ist das nicht:
du hast statische objekte - deren destruktionsreihenfolge nicht feststeht....
Sorry, hab das 'statische' ueberlesen.
mfg
v R
-
SlimTimmy schrieb:
Ich möchte, dass ein statisches Objekt als letztes im Programm zerstört wird.
Es geht darum, dass ich Memory Leaks finden möchte und deshalb dieses Objekt als letztes zerstört wird (also der Destruktor aufgerfufen wird), damit ich dann alle möglichen Leaks finden kann.Ist das statische Objekt so 'ne Art Überwachungsobjekt?
Falls ja, dann könnstest Du stattdessen die globalen new, delete Operatoren rumspielen.
-
Falls ja, dann könnstest Du stattdessen die globalen new, delete Operatoren rumspielen.
Davon würde ich abraten. Das hat schließlich Auswirkungen auf weit größere Programmteile. Achja und wo ist der Zusammenhang zwischen statischem Objekt und op new/delete?
-
HumeSikkins schrieb:
Achja und wo ist der Zusammenhang zwischen statischem Objekt und op new/delete?
Stimmt, hab wieder mal nicht nachgedacht. Bei einem statischen Objekt werden die Operatoren ja nicht aufgerufen.
-
Irgendwie habe ich ein paar Probleme damit. Wann werden denn normale statische Objekte zerstört? Vor atexit? Wenn ich meine statische Methode dort registriere, kommen einige schwerwiegende Fehler bei der Ausführung. Wenn ich das nicht mache, läuft alles gut.
-
*push*
-
Alexandrescu beschreibt in Modern C++ Design wie man das loesen kann -> du kannst dir auch mal Loki ansehen, da ist es implementiert.
http://sourceforge.net/projects/loki-lib/
Und als Buch dazu:
(Gibt nen Weg das Forum zu unterstützen wenn Du ein Buch bestellst, da müsste aber Marcus mal nen Satz zu schreiben. Weiß nich mehr wie O