29#ifndef __AGG_UTIL__REF_COUNTED_OBJECT_H__
30#define __AGG_UTIL__REF_COUNTED_OBJECT_H__
32#include "RCObjectInterface.h"
44typedef std::set<RCObject*> RCObjectSet;
58 friend class RCObject;
76 void add(RCObject* pObj);
91 void release(RCObject* pObj,
bool shouldDelete =
true);
104 RCObjectSet _liveObjects;
113class UseCountHitZeroCB {
118 virtual ~UseCountHitZeroCB()
121 virtual void executeUseCountHitZeroCB(
RCObject* pAboutToDie) = 0;
166 friend class RCObjectPool;
168 typedef std::list<UseCountHitZeroCB*> PreDeleteCBList;
230 std::string printRCObject()
const;
242 void executeAndClearPreDeleteCallbacks();
256 PreDeleteCBList _preDeleteCallbacks;
292 RCPtr(
const RCPtr& from) :
307 operator=(
const RCPtr& rhs)
309 if (rhs._obj != _obj) {
375class BadWeakPtr:
public std::runtime_error {
377 BadWeakPtr(
const std::string& msg) :
378 std::runtime_error(msg)
382 virtual ~BadWeakPtr()
noexcept
475 removeMeAsListener();
489 if (pAboutToDie != _pObj) {
490 throw BadWeakPtr(
"executeUseCountHitZeroCB() called with mismatched raw pointers!");
498 void removeMeAsListener()
501 _pObj->removePreDeleteCB(
this);
505 void addMeAsListener()
508 _pObj->addPreDeleteCB(
this);
A reference to an RCObject which automatically ref() and deref() on creation and destruction.
bool contains(RCObject *pObj) const
void release(RCObject *pObj, bool shouldDelete=true)
void remove(RCObject *pObj)
A base class for a simple reference counted object.
RCObject(RCObjectPool *pool=0)
virtual int getRefCount() const
virtual std::string toString() const
void removePreDeleteCB(UseCountHitZeroCB *pCB)
void addPreDeleteCB(UseCountHitZeroCB *pCB)
RCObject(const RCObject &proto)
virtual int unref() const
virtual void removeFromPool() const
A reference to an RCObject which automatically ref() and deref() on creation and destruction.
virtual void executeUseCountHitZeroCB(RCObject *pAboutToDie)
Helper class for temporarily hijacking an existing dhi to load a DDX response for one particular file...