summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/Exception.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/Exception.h')
-rw-r--r--cpp/src/qpid/Exception.h63
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_*/