std :: abort und std :: exit (und mehr: std :: _ Exit, std :: quick_exit) sind nur Funktionen auf niedrigerer Ebene. Sie verwenden sie, um dem Programm mitzuteilen, was genau es tun soll: welche Destruktoren (und ob) aufgerufen werden sollen, welche anderen Bereinigungsfunktionen aufgerufen werden sollen, welcher Wert zurückgegeben werden soll usw.
std :: terminate ist eine Abstraktion auf höherer Ebene: Sie wird (entweder zur Laufzeit oder von Ihnen) aufgerufen, um anzuzeigen, dass ein Fehler im Programm aufgetreten ist und dass es aus irgendeinem Grund nicht möglich ist, eine Ausnahme auszulösen. Die Notwendigkeit hierfür tritt normalerweise auf, wenn ein Fehler im Ausnahmemechanismus selbst auftritt. Sie können ihn jedoch jederzeit verwenden, wenn Sie nicht möchten, dass Ihr Programm über den angegebenen Fehler hinaus fortgesetzt wird. Ich habe die vollständige Liste der Situationen zusammengestellt, in denen std :: terminate in meinem Beitrag aufgerufen wird. Es ist nicht angegeben, was std :: terminate tut, da Sie die Kontrolle darüber haben. Sie können das Verhalten konfigurieren, indem Sie beliebige Funktionen registrieren. Die Einschränkungen, die Sie haben, bestehen darin, dass die Funktion nicht zur Fehlerstelle zurückkehren und nicht über eine Ausnahme beendet werden kann. Technisch gesehen können Sie jedoch sogar Ihre Nachrichtenpumpe im Inneren starten. Eine Liste nützlicher Dinge, die Sie im Inneren tun können, finden Sie in meinem anderen Beitrag .
Beachten Sie insbesondere, dass std :: terminate in Kontexten, in denen std :: terminate aufgrund einer ausgelösten Ausnahme aufgerufen wird, die nicht behandelt werden konnte, als Ausnahmebehandlungsroutine betrachtet wird. Sie können die Ausnahme überprüfen und mithilfe von C ++ überprüfen 11 Verwenden von std :: rethrow_exception und std :: current_exception. Es ist alles in meinem Beitrag .