Ich weiß, dass meine Destruktoren beim normalen Abwickeln des Stapels aufgerufen werden und wenn Ausnahmen ausgelöst werden, aber nicht wenn exit() aufgerufen wird.Unter welchen Umständen werden C++ - Destruktoren nicht aufgerufen?
Gibt es noch andere Fälle, in denen meine Destruktoren nicht aufgerufen werden? Was ist mit Signalen wie SIGINT oder SIGSEGV? Ich nehme an, dass sie für SIGSEGV nicht aufgerufen werden, aber für SIGNINT sind sie, woher weiß ich, welche Signale den Stapel abwickeln werden?
Gibt es andere Umstände, unter denen sie nicht aufgerufen werden?
Wie hier darauf hingewiesen, http://thedailywtf.com/Articles/My-Tales.aspx, können Sie auch die destructor bewusst sein sollte, wird nicht aufgerufen werden, wenn der Netzstecker ist gezogen;). –
SIGINT löscht den Stapel nur, wenn Sie einen Signalhandler installieren, der das Standardverhalten außer Kraft setzt. Standardmäßig führt SIGINT zum sofortigen Programmabbruch. – karunski
Nicht als Antwort, weil es eher wie ein Versehen in der Frage scheint. Destruktoren werden nur am Ende der Lebensdauer von Objekten mit statischer, automatischer oder Thread-Speicherdauer (normalerweise) automatisch aufgerufen. Bei Objekten mit ** dynamischer ** Speicherdauer wird der Destruktor nur aufgerufen, wenn 'delete' für einen Zeiger auf das Objekt aufgerufen wird. So wird ein Destruktor nicht für dynamische Objekte aufgerufen, für die 'delete' nie aufgerufen wird (sei es, weil ein Speicherleck dies unmöglich macht, oder durch Überwachung). –