34#ifndef _RBTSMARTPOINTER_H_
35#define _RBTSMARTPOINTER_H_
54 SmartPtr() : m_pT(
nullptr), m_pCount(
nullptr) {}
58 SmartPtr(T *pT) : m_pT(pT), m_pCount(
new unsigned int(1)) {}
70 m_pCount = sp.GetCountPtr();
71 T2 *pT2 =
const_cast<T2 *
>(sp.Ptr());
72 m_pT =
dynamic_cast<T *
>(pT2);
85 m_pCount = sp.m_pCount;
100 m_pCount = sp.GetCountPtr();
101 T2 *pT2 =
const_cast<T2 *
>(sp.Ptr());
102 m_pT =
dynamic_cast<T *
>(pT2);
118 bool Null()
const {
return m_pCount ==
nullptr; }
121 unsigned *GetCountPtr()
const {
return m_pCount; }
124 T *Ptr() {
return m_pT; }
125 const T *Ptr()
const {
return m_pT; }
128 void SetNull() { UnBind(); }
137 const T *operator->()
const {
145 const T &operator*()
const {
153 operator T *()
const {
return m_pT; }
159 unsigned GetRef()
const {
return ++(*m_pCount); }
162 unsigned FreeRef()
const {
164 return --(*m_pCount);
169 if (!Null() && FreeRef() == 0) {
187 return lhs.Ptr() == rhs.Ptr();
192bool operator!=(
const SmartPtr<T> &lhs,
const SmartPtr<T> &rhs) {
193 return !(lhs == rhs);
198bool operator<(
const SmartPtr<T> &lhs,
const SmartPtr<T> &rhs) {
199 return lhs.Ptr() < rhs.Ptr();
204bool operator>(
const SmartPtr<T> &lhs,
const SmartPtr<T> &rhs) {
205 return lhs.Ptr() > rhs.Ptr();
Definition SmartPointer.h:48