Wenn ich ein neues Projekt in nicht verwaltetem C++, Visual Studio 2008 oder höher erstelle, mit welchem Ausnahmebehandlungsmodell möchte ich gehen?Visual C++ nicht verwalteten Code: Verwenden Sie/EHa oder/EHsc für C++ - Ausnahmen?
Ich verstehe, dass/EHa-Option führt zu weniger effizienten Code und fängt auch SEH-Ausnahmen, oder?
Also habe ich von dieser Option entfernt und in der Regel mit/EHsc gehen, so dass ich nur C++ Ausnahmen fangen, die tatsächlich geworfen werden und Zugriffsverletzungen und andere strukturierte Ausnahmen nicht fangen, (...) Handler. Wenn es in meinem Code eine Zugriffsverletzung gibt, möchte ich nicht, dass sie von einem Catch (...) {} maskiert wird.
Ich Code mit anderen, die wollen (...) {} nichts zu tun und sie wollen es auch tun, wenn es eine Zugriffsverletzung, die für mich eine wirklich schlechte Idee scheint. Wenn es einen Fehler aufgrund schlechter Codierung gibt, wollen Sie nicht Ihre Finger in die Ohren stecken und laut "La la la la la!" damit Sie das Programm nicht abstürzen müssen? Wenn der Code aufgrund eines Codierungsfehlers jetzt in einem schlechten Zustand ist, möchten Sie, dass der Code tatsächlich fortgesetzt wird?
Also mein allgemeiner Gedanke ist, dass/EHa größeren/langsameren Code erstellt und es Programmierern erlaubt, mit dem Schreiben von Code, dass wenn ein schwerwiegender Fehler vorhanden ist, es weiterhin in einem undefinierten Zustand ausgeführt wird.
BTW, ich spreche über Anwendungen und Service-Code, die wir zum größten Teil schreiben. Nicht Low-Level-Gerätetreiber oder ähnliches.
Bitte berücksichtigen Sie Ihre Gedanken.
Sie sollten niemals versuchen, Zugriffsverletzungen in jedem Fall zu erfassen. –
Das ist mein Verständnis ... aber ich habe Leute schreiben fangen (...) {} und wenn/EHa ausgewählt ist, dann würde das die Zugriffsverletzung begraben, glaube ich. Es ist eine Sache zu fangen (...) {cleanup_stuff; werfen; } Aber selbst in diesem Fall, wenn es sich um eine Zugriffsverletzung handelt, bist du sicher, dass cleanup_stuff es tun wird? Du bist in einem schlechten Zustand, also würde ich wahrscheinlich denken, dass das Programm am besten ist, wenn man dort abstürzt. – MarkS
Ich arbeite an einem Client/Server-System, wo, wenn der Server eine Ausnahme (idealerweise jede Ausnahme, einschließlich Zugriffsverletzung) hat, möchte ich die Ausnahmebedingungsnachricht an den Client senden, bevor der Server-Thread abstürzen. Andernfalls reagiert der Server nicht mehr. –