00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _BASE_REFERENCEDOBJECT_
00026 #define _BASE_REFERENCEDOBJECT_
00027
00028 #include <base/Object>
00029 #include <base/Referenced>
00030
00031 namespace base {
00032
00033
00034
00035
00036
00037
00038 #ifdef DEBUG
00039
00040 #endif
00041
00042 class ReferencedObject : virtual public Object, virtual public Referenced
00043 {
00044 public:
00045 ReferencedObject()
00046 {
00047 #ifdef DEBUG_REFS
00048 Debugln("Constructing " << this->className() << " (" << (void*)(this) << ")");
00049 #endif
00050 }
00051
00052 virtual bool isSameKindAs(const ReferencedObject&) const { return true; }
00053
00054 #ifdef DEBUG_REFS
00055 inline void unreference() const
00056 {
00057 --_refCount;
00058 if (_refCount<=0) {
00059 Debugln("Deleting " << this->className() << " (" << (void*)(this) << ")");
00060 }
00061 }
00062 #endif
00063
00064 virtual ~ReferencedObject() {}
00065
00066 private:
00067
00068
00069 ReferencedObject(const ReferencedObject&): Referenced() {}
00070 ReferencedObject& operator=(const ReferencedObject&) { return *this; }
00071 };
00072
00073
00074 }
00075
00076 #endif