#include <IRefObject.h>
This template class act similar as CComPtr.
Using RefPtr<RefObjectType> will be much safer than RefObjectType* since this template class handles the AddRef and Release in its constructor and destructor.
Usage Example: class DerivedRefObject : public ARefObject { public: void foo(); };
Use DerivedRefObject without RefPtr: { DerivedRefObject* pObject = new DerivedRefObject; pObject->AddRef(); // Add reference pObject->foo(); pObject->Release(); // release the object pObject = NULL; }
Use DerivedRefObject with RefPtr: { RefPtr<DerivedRefObject> pObject = new DerivedRefObject; pObject->foo(); don't need to worry about deleting this object }
More RefPtr examples: RefPtr<DerivedRefObject> pObject2 = new DerivedRefObject; RefPtr<DerivedRefObject> pObject3 = pObject2; pObject2 = NULL; // pObject3 is still valid. pObject3->foo(); pObject3 = NULL; // Release the last reference to the object and the object is destroyed automatically.
Public Types |
|
| typedef RefObjectType | ObjectType |
| typedef
RefPtr<
RefObjectType, SafeRefObjectType, LifeTimePolicy > |
SelfType |
Public Member Functions |
|
| RefPtr () | |
| RefPtr (RefObjectType *pPtr) | |
| RefPtr (const SelfType &other) | |
| template<class OtherInterface , class OtherSafeRefObjectType , class OtherLifeTimePolicy > | |
| RefPtr (const RefPtr< OtherInterface, OtherSafeRefObjectType, OtherLifeTimePolicy > &other) | |
| template<class OtherInterface > | |
| RefPtr (OtherInterface *pPtr) | |
| ~RefPtr () | |
| void | Swap (SelfType &other) |
| void | Release () |
| RefObjectType & | operator* () const |
| RefObjectType * | GetPointer () const |
| SafeRefObjectType * | operator-> () const |
| RefObjectType * | operator= (RefObjectType *pPtr) |
| RefObjectType * | operator= (const SelfType &other) |
| template<class OtherInterface > | |
| RefObjectType * | operator= (OtherInterface *pPtr) |
| template<class OtherInterface , class OtherSafeRefObjectType , class OtherLifeTimePolicy > | |
| RefObjectType * | operator= (const RefPtr< OtherInterface, OtherSafeRefObjectType, OtherLifeTimePolicy > &other) |
| bool | operator! () const |
| bool | operator< (RefObjectType *pPtr) const |
| bool | operator< (const SelfType &pPtr) const |
| bool | operator== (RefObjectType *pPtr) const |
| bool | operator== (const SelfType &pPtr) const |
| bool | operator!= (RefObjectType *pPtr) const |
| bool | operator!= (const SelfType &pPtr) const |
| typedef RefObjectType ObjectType |
| RefPtr | ( | RefObjectType * | pPtr | ) | [inline] |
{
mpObject = pPtr;
if (mpObject != NULL)
{
LifeTimePolicy::AddRef(mpObject);
}
}
{
mpObject = other.mpObject;
if (mpObject != NULL)
{
LifeTimePolicy::AddRef(mpObject);
}
}
| RefPtr | ( | OtherInterface * | pPtr | ) | [inline, explicit] |
| void Swap | ( | SelfType & | other | ) | [inline] |
{
RefObjectType* pTemp = mpObject;
mpObject = other.mpObject;
other.mpObject = pTemp;
}
| void Release | ( | ) | [inline] |
{
RefObjectType* pTemp = mpObject;
if (mpObject)
{
mpObject = NULL;
LifeTimePolicy::Release(pTemp);
}
}
| RefObjectType& operator* | ( | ) | const [inline] |
{
return *mpObject;
}
| RefObjectType* GetPointer | ( | ) | const [inline] |
{
return mpObject;
}
| SafeRefObjectType* operator-> | ( | ) | const [inline] |
{
return (SafeRefObjectType*)mpObject;
}
| RefObjectType* operator= | ( | RefObjectType * | pPtr | ) | [inline] |
{
if (pPtr != NULL)
{
LifeTimePolicy::AddRef(pPtr);
}
if (mpObject)
{
LifeTimePolicy::Release(mpObject);
}
mpObject = pPtr;
return pPtr;
}
| RefObjectType* operator= | ( | const SelfType & | other | ) | [inline] |
{
RefObjectType* pPtr = other.mpObject;
if (pPtr != NULL)
{
LifeTimePolicy::AddRef(pPtr);
}
if (mpObject)
{
LifeTimePolicy::Release(mpObject);
}
mpObject = pPtr;
return pPtr;
}
| RefObjectType* operator= | ( | OtherInterface * | pPtr | ) | [inline] |
{
RefObjectType* pBackup = mpObject;
if (pPtr != NULL)
{
mpObject = dynamic_cast<RefObjectType*>(pPtr);
}
else
{
mpObject = NULL;
}
if (NULL != mpObject)
{
LifeTimePolicy::AddRef(mpObject);
}
if (pBackup != NULL)
{
LifeTimePolicy::Release(pBackup);
}
return mpObject;
}
| RefObjectType* operator= | ( | const RefPtr< OtherInterface, OtherSafeRefObjectType, OtherLifeTimePolicy > & | other | ) | [inline] |
{
RefObjectType* pBackup = mpObject;
if (other != NULL)
{
mpObject = dynamic_cast<RefObjectType*>(other.GetPointer());
}
else
{
mpObject = NULL;
}
if (NULL != mpObject)
{
LifeTimePolicy::AddRef(mpObject);
}
if (pBackup != NULL)
{
LifeTimePolicy::Release(pBackup);
}
return mpObject;
}
| bool operator! | ( | ) | const [inline] |
{
return mpObject == NULL;
}
| bool operator< | ( | RefObjectType * | pPtr | ) | const [inline] |
{
return mpObject < pPtr;
}
| bool operator< | ( | const SelfType & | pPtr | ) | const [inline] |
{
return mpObject < pPtr.mpObject;
}
| bool operator== | ( | RefObjectType * | pPtr | ) | const [inline] |
{
return mpObject == pPtr;
}
| bool operator== | ( | const SelfType & | pPtr | ) | const [inline] |
{
return mpObject == pPtr.mpObject;
}
| bool operator!= | ( | RefObjectType * | pPtr | ) | const [inline] |
{
return mpObject != pPtr;
}
| bool operator!= | ( | const SelfType & | pPtr | ) | const [inline] |
{
return mpObject != pPtr.mpObject;
}