+
+/** Base class for reference-counted objects. */
+class refcounted {
+public:
+ refcounted() throw() : refcount(0) {}
+
+ size_t add_reference() throw() { return ++refcount; }
+ size_t remove_reference() throw() { return --refcount; }
+ size_t get_refcount() const throw() { return refcount; }
+ void set_refcount(size_t r) throw() { refcount = r; }
+
+private:
+ size_t refcount; ///< reference counter
+};
+
+