55class SharedPtrT :
public PtrT<T>
63 ~SharedPtrT() { reset(); }
72 SharedPtrT(
const SharedPtrT<T>& ptr)
75 _copy(ptr.
get(), ptr.refCountPtr(), ptr.explicitDelete());
79 template <
typename T2>
80 SharedPtrT(
const SharedPtrT<T2>& ptr)
83 _copy(ptr.
get(), ptr.refCountPtr(), ptr.explicitDelete());
87 template <
typename T2>
88 explicit SharedPtrT(T2* t,
bool tofree =
true)
95 template <
typename T2>
96 explicit SharedPtrT(
const SharedPtrT<T2>& ptr,
bool)
98 _copy(
dynamic_cast<T*
>(ptr.
get()), ptr.refCountPtr(), ptr.explicitDelete());
101 SharedPtrT<T>& operator=(
const SharedPtrT<T>& ptr)
104 _copy(ptr.
get(), ptr.refCountPtr(), ptr.explicitDelete());
109 template <
typename T2>
110 SharedPtrT<T>& operator=(
const SharedPtrT<T2>& ptr)
113 _copy(ptr.
get(), ptr.refCountPtr(), ptr.explicitDelete());
117 bool isUnique()
const {
return (m_counter->refCount() == 1); }
118 Int32 refCount()
const {
return (m_counter) ? m_counter->refCount() : 0; }
119 bool isUsed()
const {
return (m_counter != NULL); }
124 m_counter->removeRef();
125 if (m_counter->refCount() == 0) {
134 RefCounter* refCountPtr()
const {
return m_counter; }
135 bool explicitDelete()
const {
return m_free; }
139 void _copy(T* ptr,
RefCounter* ref,
bool free)