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 notierestring 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 keinstd::string
. In dem Fall der funktioniert wird durch den+
Operator vonstd::string
eben einstd::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.