diff options
Diffstat (limited to 'cpp/src/qpid/Exception.h')
-rw-r--r-- | cpp/src/qpid/Exception.h | 63 |
1 files changed, 46 insertions, 17 deletions
diff --git a/cpp/src/qpid/Exception.h b/cpp/src/qpid/Exception.h index 2ba3620095..2aba43586d 100644 --- a/cpp/src/qpid/Exception.h +++ b/cpp/src/qpid/Exception.h @@ -24,26 +24,55 @@ #include <exception> #include <string> +#include <memory> namespace qpid { - /** - * Exception base class for all Qpid exceptions. - */ - class Exception : public std::exception - { - protected: - std::string whatStr; - - public: - Exception() throw() {} - Exception(const std::string& str) throw() : whatStr(str) {} - Exception(const char* str) throw() : whatStr(str) {} - virtual ~Exception() throw(); - - const char* what() const throw() { return whatStr.c_str(); } - virtual std::string toString() const throw() { return whatStr; } - }; +/** + * Exception base class for all Qpid exceptions. + */ +class Exception : public std::exception +{ + protected: + std::string whatStr; + + public: + Exception() throw() {} + Exception(const std::string& str) throw() : whatStr(str) {} + Exception(const char* str) throw() : whatStr(str) {} + virtual ~Exception() throw(); + + virtual const char* what() const throw() { return whatStr.c_str(); } + virtual std::string toString() const throw() { return whatStr; } +}; + +/** + * Wrapper for heap-allocated exceptions. Use like this: + * <code> + * std::auto_ptr<Exception> ex = new SomeEx(...) + * HeapException hex(ex); // Takes ownership + * throw hex; // Auto-deletes ex + * </code> + */ +class HeapException : public Exception, public std::auto_ptr<Exception> +{ + public: + HeapException() {} + HeapException(std::auto_ptr<Exception> e) : std::auto_ptr<Exception>(e) {} + + HeapException& operator=(std::auto_ptr<Exception>& e) { + std::auto_ptr<Exception>::operator=(e); + return *this; + } + + ~HeapException() throw() {} + + virtual const char* what() const throw() { return (*this)->what(); } + virtual std::string toString() const throw() { + return (*this)->toString(); + } +}; + } #endif /*!_Exception_*/ |