diff options
Diffstat (limited to 'cpp/include/IceUtil/GCShared.h')
-rw-r--r-- | cpp/include/IceUtil/GCShared.h | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/cpp/include/IceUtil/GCShared.h b/cpp/include/IceUtil/GCShared.h index 54151640dd9..cfa9a1803e3 100644 --- a/cpp/include/IceUtil/GCShared.h +++ b/cpp/include/IceUtil/GCShared.h @@ -16,6 +16,7 @@ #define ICE_UTIL_GC_SHARED_H #include <IceUtil/Config.h> +#include <IceUtil/GCRecMutex.h> #include <set> namespace IceUtil @@ -25,7 +26,7 @@ class GC; class GCShared; typedef std::set<GCShared*> GCObjectSet; -extern ICE_UTIL_API GCObjectSet gcObjects; // Set of pointers to all existing classes. +extern ICE_UTIL_API GCObjectSet gcObjects; // Set of pointers to all existing classes with class data members. typedef std::multiset<GCShared*> GCObjectMultiSet; @@ -33,26 +34,23 @@ class ICE_UTIL_API GCShared : public noncopyable { public: - GCShared(); - virtual ~GCShared(); - void __incRef(); - void __decRef(); + GCShared() : _ref(0), _noDelete(false) {} + virtual ~GCShared() {} + virtual void __incRef(); // First derived class with class data members overrides this. + virtual void __decRef(); // Ditto. int __getRef() const; void __setNoDelete(bool); - void __decRefUnsafe(); + void __decRefUnsafe() { --_ref; } virtual void __gcReachable(GCObjectMultiSet&) const = 0; virtual void __gcClear() = 0; protected: static void __addObject(GCObjectMultiSet&, GCShared*); - -private: - int _ref; bool _noDelete; - friend class IceUtil::GC; + friend class IceUtil::GC; // Allows IceUtil::GC to read value of _ref. }; } |