79 lines
1.2 KiB
C++
79 lines
1.2 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef __NAUTO_PTR__
|
|
#define __NAUTO_PTR__
|
|
|
|
|
|
#include "alloc/ialloc.h"
|
|
#include "billing/billing.h"
|
|
|
|
|
|
namespace GS {
|
|
|
|
/*!
|
|
@short Auto pointer.
|
|
@author Emmanuel Julien (ejulien@gsworks.fr)
|
|
*/
|
|
template <class T> class AutoPtr
|
|
{
|
|
private:
|
|
|
|
T *o;
|
|
|
|
public:
|
|
|
|
inline operator T*() const
|
|
{ return o; }
|
|
inline T *c_ptr() const
|
|
{ return o; }
|
|
|
|
inline bool IsNull() const { return o ? false : true; }
|
|
inline bool IsValid() const { return o ? true : false; }
|
|
|
|
T *operator = (T *p)
|
|
{
|
|
if (o != p)
|
|
{
|
|
delete(o);
|
|
o = p;
|
|
}
|
|
return o;
|
|
}
|
|
|
|
inline T &operator[] (size_t n) { return o[n]; }
|
|
|
|
inline bool operator == (const T *p) const
|
|
{ return o == p; }
|
|
inline bool operator != (const T *p) const
|
|
{ return o != p; }
|
|
|
|
inline T *operator -> () const
|
|
{ return o; }
|
|
inline T &operator * () const
|
|
{ return *o; }
|
|
|
|
inline T *Detach()
|
|
{
|
|
T *p = o;
|
|
o = 0;
|
|
return p;
|
|
}
|
|
|
|
explicit AutoPtr(T *p = 0) : o(p)
|
|
{}
|
|
~AutoPtr()
|
|
{
|
|
delete(o);
|
|
o = 0;
|
|
}
|
|
};
|
|
|
|
} // GS
|
|
|
|
|
|
#endif // __NAUTO_PTR__
|