PDA

View Full Version : Destructor for Qtconcurrent::Exception?



bp45738
20th September 2011, 02:18
I am deriving an exception class from Qtconcurrent::Exception, and am receiving a compilation error

looser throw specifier for 'virtual SException::~SException()'
overriding 'virtual QtConcurrent::Exception::~Exception() throw()'
The class is as follows

class SException : public QtConcurrent::Exception
{
public:
SException(const QString& message) : message_(message) {}
void raise() const { throw *this; }
Exception *clone() const { return new SException(*this); }
QString message() const { return message_; }

private:
QString message_;
};
How do you specify the destructor correctly? I have already tried specifying a virtual destructor in the derived class but still get the same error.

wysota
20th September 2011, 03:10
Did you specify throw() for your destructor?

bp45738
20th September 2011, 14:39
When I add the destructor

virtual ~SException() throw();
the compiler error goes away, but now I get a linking error looking for the implementation of the SException destructor.

What is the difference between

virtual ~SException() throw();
and

virtual ~SException() { throw(); }
?

wysota
20th September 2011, 15:06
You get a linker error because you didn't implement a destructor that contains a throw declaration. If you declare a method with throw(), you need to implement a method with throw().

About your question -- the difference is like between a bucket of water and an apple.

bp45738
20th September 2011, 18:25
Thanks, I figured out what throw() does and I added an implementation to the destructor.