Exception als Pointer oder als Objekt werfen?



  • Hallo,
    ist es schneller einen Pointer bei einer Exception zu werfen als ein Objekt?
    Muss ich das Exception Objekt selber deleten, wenn ich da einen Pointer nehme?

    Gruß,
    Andy



  • Bei einer Exception sollte es Dich nicht interessieren, wie schnell das Verfahren ist. Wenn das zum Flaschenhals wird, verwendest Du Exceptions (lies: Ausnahme) vermutlich falsch.

    Generell kann man sagen: Ein try/catch Block kostet wenig, solange er nicht genutzt wird, sprich, keine Exception fliegt.

    Und, was Du mit new allokierst, musst Du mit delete löschen. Auch eine Exception ändert daran nichts, warum auch?



  • Wenn du etwas mit new holst dann mußte es auch selebr deleten. Die Exception würde ich normal werfen und nicht über new.



  • hmmmm,

    ich meine mich daran zu erinnern, dass man Exceptions NIEMALS als Heapobjekte werfen sollte:
    Einerseits weiß man nie, ob man ein delete darauf ausführen muss oder nicht darf.
    Andererseits soll die Runtime das Exceptionobjekt in einen "sicheren Speicherbereich" kopieren (z.B. damit auch sowas wie bad_alloc funktionieren kann). Wenn man nun nur den Zeiger auf ein Heapobjekt wirft, landet nur der im "sicheren Bereich" ... was nicht im Sinne des Erfinders ist.
    Der empfohlene (lies "einzig zuverlässig sichere") Weg ist das Werfen als Autoobject (" throw Exception(1, "Simon2"); ") und das Fangen per Referenz (" catch(Exception& e) ").

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Einerseits weiß man nie, ob man ein delete darauf ausführen muss oder nicht darf.

    Dürfte das Problem sein, was man immer hat, wenn man (die Verantwortung für einen) Zeiger aus dem Scope herausgibt, oder?
    In diesem Sinne gilt das gesagte natürlich, aber in beiden Situationen gleichermaßen 🙂



  • Andy2211 schrieb:

    Hallo,
    ist es schneller einen Pointer bei einer Exception zu werfen als ein Objekt?
    Muss ich das Exception Objekt selber deleten, wenn ich da einen Pointer nehme?

    Gruß,
    Andy

    Es geht nicht um Schnelligkeit , und sowieso Speicher dynamisch zu allokieren ist auf jeden Fall langsamer als auf dem Stack .
    Aber was passiert wenn gar kein dyn. Speicher mehr zu verfügung steht ?


Anmelden zum Antworten