/* ========================================================================
** Extended Template and Library
** Template Smart Pointer Implementation
-** $Id: _smart_ptr.h,v 1.1.1.1 2005/01/04 01:31:48 darco Exp $
+** $Id$
**
** Copyright (c) 2002 Robert B. Quattlebaum Jr.
**
typedef D destructor_type;
#ifdef DOXYGEN_SHOULD_SKIP_THIS // #ifdef is not a typo
-private:
+private:
#endif
value_type *obj; //!< \internal Pointer to object
reference_counter refcount;
obj=(pointer)x.get();
refcount=x.refcount;
}
-
+
return *this;
}
{
if(x.get()==obj)
return *this;
-
+
reset();
if(x.obj)
{
-
+
obj=(pointer)x.get();
refcount=x.refcount;
}
-
+
return *this;
}
//! smart_ptr reset procedure
void
reset()
- {
+ {
if(obj)
- {
+ {
if(refcount.unique()) destructor_type()(obj);
refcount.detach();
obj=0;
}
}
-
+
void spawn() { operator=(smart_ptr(new T)); }
//! Returns number of instances
const count_type& count()const { return refcount; }
bool unique()const { return refcount.unique(); }
-
+
reference operator*()const { assert(obj); return *obj; }
pointer operator->()const { assert(obj); return obj; }