Die Kombination von C- (strukturiert) und C++-Ausnahmen
Wenn Sie portabeleren Code unter Verwendung der strukturierten Ausnahmebehandlung in einem C++-Programm schreiben möchten wird nicht empfohlen.Sie sollten jedoch auch mit /EHa kompilieren und strukturierte Ausnahmen und C++-Quellcode kombinieren und erfordern einige Funktionen zur Behandlung beider Arten von Ausnahmen.Da ein strukturierte Ausnahmehandler kein Konzept von Objekten oder typisierter Ausnahmen verfügt, kann er die keine Ausnahmen behandeln, die durch C++-Code ausgelöst werden. Allerdings können C++-catch-Handler strukturierte Ausnahmen behandeln.Daher wird die C++-Ausnahmebehandlung (try, behandelt die Syntax throw, catch) nicht vom C-Compiler, aber Syntax der strukturierten Ausnahmebehandlung (__try, __except, __finallyvom C++-Compiler unterstützt wird) akzeptiert.
Weitere Informationen finden Sie unter _set_se_translator strukturierter Informationen über die Behandlung von Ausnahmen als C++-Ausnahmen.
Wenn Sie die strukturierte und C++-Ausnahmen kombinieren, beachten Sie Folgendes:
C++-Ausnahmen und strukturierte Ausnahmen können nicht in der gleichen Funktion kombiniert werden.
__finally Beendigungshandler (Blöcke) werden immer noch während des Entladevorgangs ausgeführt, nachdem eine Ausnahme ausgelöst wird.
Die C++-Ausnahmebehandlung ist Entladungs kann in allen Modulen abfangen und beibehalten, die mit der /EH-Compileroption kompiliert wurden (diese Option aktiviert ist Entladungs).
Es gibt möglicherweise einige Situationen, in denen Funktionen Destruktor nicht für alle Objekte bezeichnet werden.Wenn z. B. eine strukturierte Ausnahme bei dem Versuch, einen Funktionsaufruf durch einen nicht initialisierten Funktionszeiger zu machen. Diese Funktion wird als Parameterobjekte akzeptiert, die vor dem Aufruf erstellt wurden, weisen diese Objekte nicht über Destruktoren, die während der Stapel Entladen von aufgerufen werden.