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? 🙂


Log in to reply