Class object thrown as exception



  • Hello,

    I want to throw my created class Error object and catch it. Is this valid?
    Example code:

    #include <QCoreApplication>
    #include <QDebug>
    
    class Error
    {
    public:
        enum Type {
            ONE,
            TWO,
            THREE
        };
    
        Error() {}
        Error(Type type, const QString &item)
            : mType(type), mItem(item) {}
    
        Type type() const { return mType; }
        QString item() const { return mItem; }
    
    private:
        Type mType;
        QString mItem;
    };
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        try {
            throw Error(Error::TWO, "bla");
        } catch (const Error &e) {
            qDebug() << e.type() << e.item();
        }
    
        return a.exec();
    }
    

  • Qt Champions 2018

    I can't see why not



  • @VRonin Thanks. I was concerned about using QString inside class Error and Error not deriving from some base exception class. Because in pure c++ people usually don't throw std::string as exception because std::string can throw exceptions as well. For that reason custom exceptions derive from std::exception.


  • Qt Champions 2018

    If you are using mutiple threads you can use QException base class. For the rest, Qt code itself should not throw in release code except probably for the unavoidable std::bad_alloc


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.