X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5..cd621fe499141885e5a0d8b4e42a0f8a7f41a9ac:/lib/base/object.h diff --git a/lib/base/object.h b/lib/base/object.h index 744bff19..ddb4512c 100644 --- a/lib/base/object.h +++ b/lib/base/object.h @@ -19,10 +19,18 @@ public: virtual void Release()=0; }; -#define DECLARE_REF private: int ref; public: void AddRef(); void Release(); +class oRefCount +{ + int ref; +public: + oRefCount(): ref(0) { } + operator int&() { return ref; } +}; + +#define DECLARE_REF private: oRefCount ref; public: void AddRef(); void Release(); #ifdef OBJECT_DEBUG extern int object_total_remaining; -#define DEFINE_REF(c) void c::AddRef() { ++object_total_remaining; ++ref; eDebug("OBJECT_DEBUG " #c "+%p now %d", this, ref); } void c::Release() { --object_total_remaining; eDebug("OBJECT_DEBUG " #c "-%p now %d", this, ref-1); if (!--ref) delete this; } +#define DEFINE_REF(c) void c::AddRef() { ++object_total_remaining; ++ref; eDebug("OBJECT_DEBUG " #c "+%p now %d", this, (int)ref); } void c::Release() { --object_total_remaining; eDebug("OBJECT_DEBUG " #c "-%p now %d", this, ref-1); if (!--ref) delete this; } #else #define DEFINE_REF(c) void c::AddRef() { ++ref; } void c::Release() { if (!--ref) delete this; } #endif