g++ Exception Handling Probleme



  • Hi,

    kann mir jemand sagen was ich machen muss um mit g++ char* werfen uva fangen zu koennen?

    Ein kleines Programm um mein Problem zu verdeutlichen:

    test.cc:

    struct foo {
      foo() throw(char*);
    };
    foo::foo() throw(char*) { throw("c-err"); }
    
    int main() {
      try {
        foo s;
      } catch(...) { return 1; }
      return 0;
    }
    
    $ g++ -Wall test.cc
    $ ./a.out ; echo $?
    terminate called after throwing an instance of 'char const*'
    Aborted
    134
    $
    

    Das ganze funktioniert einwandfrei mit Klassen, mit anderen primitiven Datentypen und deren dazugehoerigen Pointern. Nur mit char* bring ich das irgendwie nicht zum laufen...
    Googlen und herumprobieren hat mich nicht viel schlauer gemacht, und eigentlich duerfte die Exception doch gar nicht auftreten, oder??

    Ich hoffe ihr seit schlauer und antwortet zahlreich 😉
    Danke schon mal im voraus
    - Roger



  • useLess schrieb:

    und eigentlich duerfte die Exception doch gar nicht auftreten, oder??

    Wieso nicht? Wegen der Exception Specification?

    Dazu empfehle ich http://www.gotw.ca/publications/mill22.htm. Und lass die Exception Specification weg.



  • zuerst mal danke fuer die rasche Antwort

    MFK schrieb:

    Wieso nicht? Wegen der Exception Specification?

    hab eher an den catch-all block gedacht

    MFK schrieb:

    Und lass die Exception Specification weg.

    hm... das funktioniert zwar, auf die Loesung moechte ich aber nur ungern zurueckgreifen (da ich sonst den restlichen Code hier abaendern muesste damit es einheitlich bleibt und imo ein bisschen die Uebersicht darunter leidet)

    trotzdem Danke



  • Wenn du nicht darauf verzichten willst, musst du die richtige Spezifikation benutzen:

    foo() throw(char const *);
    


  • useLess schrieb:

    hab eher an den catch-all block gedacht

    Der hilft dir nicht, wenn du eine Exception Specification angibst. Lies dir den Text von Herb Sutter durch, da steht drin, was passiert, wenn eine andere Exception geworfen wird, als in der Exception Specification steht, und warum das dein Program unter Umständen sogar langsamer machen kann.



  • Ponto schrieb:

    foo() throw(char const *);

    Funktioniert 1A - Danke
    Hatte mir eingebildet gelesen zu haben dass const und volatile in ES keine Bedeutung zukommt... (ansi-iso c++ prof. programmer's handbook)

    Ich habe mich jetzt allerdings doch dazu entschlossen den Rat von Sutter zu befolgen und auf EH zur Gänze zu verzichten.

    Danke Leute
    Happy Hacking && Ciao


Anmelden zum Antworten