Ist diese Zeile sicher? String an std::exception Ctor
-
Abend!
Ist folgende Zeile sicher?
throw std::exception( QString("Invalid account type: '%1'").arg(typeString).toStdString().c_str() );
c_str() liefert ja einen char* auf den temporären std::string der von toStdString() zurückgegeben wird. Ist dieser temporäre String auf jeden Fall noch existent wenn der std::exception Ctor aufgerufen wird? Und wird std::exception den char* kopieren/klonen?
-
Das temporäre Objekt existiert bis zum Semikolon, also ist das zulässig.
-
kompiliert es überhaupt?
denn std::exception hat keinen Konstruktor, welcher ein "(const) char*" nimmt
EDIT: ok ich sehe gerade, das ist eine MSVC extension...
Bezüglich der Frage ob der "string" kopiert wird musst du in der MSDN nachsehen.
-
Statt sich auf Compiler-Extensions zu verlassen, könnte auch einfach der QString geworfen werden, dieses Gemache mit den 2-3 zusätzlichen Konvertierungen muss nicht sein.
-
Youka schrieb:
Statt sich auf Compiler-Extensions zu verlassen, könnte auch einfach der QString geworfen werden, dieses Gemache mit den 2-3 zusätzlichen Konvertierungen muss nicht sein.
würde ich nicht machen. damit ist dann der vorteil der exception-hirarchie der stl dahin. das programm reagiert ja nicht auf jeden fehler gleich.
-
dann einfahc ne Klasse von std::exception ableiten, die einen QString nimmt?