Exception: throw string



  • Moin Community;

    es geht um eine Webanwendung, in der main habe ich einen try/catch Block, wie üblich:

        Form *response = new Form;
        try{
            response->inst(url, BIN);
            response->header("Content-Type: text/html; Charset=utf-8");
            response->control();
            response->start_html();
            response->body();
            response->end_html();
        }
        catch(string errstr){
            cout << "Content-Type: text/plain; Charset=utf-8\n\n" << errstr;
            return 1;
        }
        if( response->if_content() ){
            cout << response->header() << response->content_stream.str();
        }
        else{
            cout << response->header()
                 + response->start_html_stream.str() 
                 + response->body_stream.str() 
                 + response->end_html_stream.str();
        }
       return 0;
    

    Wenn ich eine Ex werfe mit

     throw "Oops ...";
    

    wird die Ex nicht gefangen, der Webserver legt mit status 500 die Ohren an.
    Wenn ich jedoch notiere

    string errstr;
    throw "Ooops"+errstr;
    

    greift catch() und der Fehlertext kommt im Browser an. Offensichtlich ist "Ooops" allein kein String vom Datentyp string, erst die string-Verkettung bringt den cast.

    Nun, ich bin relativ neu in c++ und hätte gerne gewusst ob ich das bi hierhin richtig verstanden habe 😉

    Schön wärs natürlich, gerade beim Entwickeln, ein einfaches throw "wir sind hier und da" schmeißen zu können. Kamma da was machen?

    Viele Güße!



  • PS:

    bitte um Nachsicht, ich mache c++ noch nicht so lange, also mit

    throw string("ich bin hier und da...");
    

    käme ich beim Entwickeln voran. Bleibt jedoch das Problem daß nicht alle Exceptions so gefangen werden wie vorgesehen.

    Viele Grüße und Frohes Fest 😉



  • @_ro_ro "Ooops" ist in c++ ein Char Array und kein std::string. In dem Fall der funktioniert wird durch den + Operator von std::string eben ein std::string zurück gegeben.

    Ich würde dir aber dringend dazu raten, die std::exception Typen anzugucken und den richtigen Fehlertyp zu verwenden.



  • @Schlangenmensch Danke!!!

    FF
    (Frohes Fest)

    😉



  • Außerdem solltest du aufhören (oder dir gar nicht erst angewöhnen), new zu verwenden. Verwende stattdessen Stackvariablen oder Smartpointer. In deinem Code hier hast du ein Speicherleck, wenn die Exception fliegt.

    Auch im nicht-Exception-Fall leakst du.


Anmelden zum Antworten