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