DATAKIT API  V2025.1
Dtk_SmartPtr< T > Class Template Reference

Public Types

typedef T element_type
 
typedef T * pointer
 

Public Member Functions

void Clear ()
 Resets the Dtk_SmartPtr content. More...
 
void Clone (Dtk_SmartPtr< T > &out) const
 
 Dtk_SmartPtr ()
 
 Dtk_SmartPtr (const Dtk_SmartPtr< T > &p)
 
 Dtk_SmartPtr (Dtk_SmartPtr &&p) DTK_NOEXCEPT
 
 Dtk_SmartPtr (T *p)
 
pointer get () const DTK_NOEXCEPT
 
Dtk_bool IsNotNULL () const
 
Dtk_bool IsNULL () const
 
 operator bool () const DTK_NOEXCEPT
 
element_typeoperator* () const DTK_NOEXCEPT
 
pointer operator-> () const DTK_NOEXCEPT
 
Dtk_SmartPtr< T > & operator= (const Dtk_SmartPtr< T > &p) DTK_NOEXCEPT
 
Dtk_SmartPtroperator= (Dtk_SmartPtr &&p) DTK_NOEXCEPT
 
 ~Dtk_SmartPtr ()
 

Static Public Member Functions

template<typename T2 >
static Dtk_SmartPtr< T > DtkDynamicCast (const Dtk_SmartPtr< T2 > &p)
 

Protected Attributes

T * ptr_
 

Friends

class Dtk_Object
 
std::ostream & operator<< (std::ostream &o, const Dtk_SmartPtr &d)
 

Detailed Description

template<typename T>
class Dtk_SmartPtr< T >

This the Smart Pointer template

Member Typedef Documentation

◆ element_type

template<typename T >
typedef T Dtk_SmartPtr< T >::element_type

◆ pointer

template<typename T >
typedef T* Dtk_SmartPtr< T >::pointer

Constructor & Destructor Documentation

◆ ~Dtk_SmartPtr()

template<typename T >
Dtk_SmartPtr< T >::~Dtk_SmartPtr
157 {
158  release();
159 }

◆ Dtk_SmartPtr() [1/4]

template<typename T >
Dtk_SmartPtr< T >::Dtk_SmartPtr
162 {
163  ptr_ = NULL;
164 }

◆ Dtk_SmartPtr() [2/4]

template<typename T >
Dtk_SmartPtr< T >::Dtk_SmartPtr ( T *  p)
167  :ptr_(p)
168 {
169  if(ptr_)
170  ++ptr_->count_;
171 } // p ne doit pas valoir NULL

◆ Dtk_SmartPtr() [3/4]

template<typename T >
Dtk_SmartPtr< T >::Dtk_SmartPtr ( const Dtk_SmartPtr< T > &  p)
174  :ptr_(p.ptr_)
175 {
176  if(ptr_)
177  ++ptr_->count_;
178 }

◆ Dtk_SmartPtr() [4/4]

template<typename T >
Dtk_SmartPtr< T >::Dtk_SmartPtr ( Dtk_SmartPtr< T > &&  p)
79  : ptr_(p.ptr_)
80  {
81  p.ptr_ = nullptr;
82  }

Member Function Documentation

◆ Clear()

template<typename T >
void Dtk_SmartPtr< T >::Clear

Resets the Dtk_SmartPtr content.

204 {
205  release();
206  ptr_ = NULL;
207 }

◆ Clone()

template<typename T >
void Dtk_SmartPtr< T >::Clone ( Dtk_SmartPtr< T > &  out) const
193 {
194  if(ptr_)
195  {
196  res = T::DtkDynamicCast( ptr_->Clone() );
197  //res = new T(*ptr_);
198  }
199 }

◆ DtkDynamicCast()

template<typename T >
template<typename T2 >
static Dtk_SmartPtr<T> Dtk_SmartPtr< T >::DtkDynamicCast ( const Dtk_SmartPtr< T2 > &  p)
static
102  {
103  if( p.IsNULL() )
104  {
105  return NULL;
106  }
107  else
108  {
109  return T::DtkDynamicCast(p.operator ->());
110  }
111  }

◆ get()

template<typename T >
pointer Dtk_SmartPtr< T >::get ( ) const
98  { return ptr_; }

◆ IsNotNULL()

template<typename T >
Dtk_bool Dtk_SmartPtr< T >::IsNotNULL ( ) const
119 {return ((ptr_)?(true):(false));}

◆ IsNULL()

template<typename T >
Dtk_bool Dtk_SmartPtr< T >::IsNULL ( ) const
118 {return ((!ptr_)?(true):(false));}

◆ operator bool()

template<typename T >
Dtk_SmartPtr< T >::operator bool ( ) const
explicit
68  {
69  return ptr_ ? &dtk::detail::bool_conversion::for_bool : dtk::detail::explicit_bool_arg(0);
70  }

◆ operator*()

template<typename T >
element_type& Dtk_SmartPtr< T >::operator* ( ) const
59  {
60  return *ptr_;
61  }

◆ operator->()

template<typename T >
pointer Dtk_SmartPtr< T >::operator-> ( ) const
53  {
55  return ptr_;
56  }

◆ operator=() [1/2]

template<typename T >
Dtk_SmartPtr< T > & Dtk_SmartPtr< T >::operator= ( const Dtk_SmartPtr< T > &  p)
182 { // NE CHANGEZ PAS L'ORDRE DE CES INSTRUCTIONS!
183  // (Cet ordre gere correctement le cas de l'auto-affectation)
184  if(p.ptr_)
185  ++p.ptr_->count_;
186  release();
187  ptr_ = p.ptr_;
188  return *this;
189 }

◆ operator=() [2/2]

template<typename T >
Dtk_SmartPtr& Dtk_SmartPtr< T >::operator= ( Dtk_SmartPtr< T > &&  p)
85  {
86  if(this != &p)
87  {
88  release();
89  ptr_ = p.ptr_;
90  p.ptr_ = nullptr;
91  }
92 
93  return *this;
94  }

Friends And Related Function Documentation

◆ Dtk_Object

template<typename T >
friend class Dtk_Object
friend

◆ operator<<

template<typename T >
std::ostream& operator<< ( std::ostream &  o,
const Dtk_SmartPtr< T > &  d 
)
friend
123  {
124  if (d.ptr_)
125  {
126  o <<"<Dtk_SmartPtr><Adr>" << d.ptr_ << "</Adr><Val>";
127  o << *(d.ptr_);
128  o << "</Val></Dtk_SmartPtr>"<<std::endl;
129  return o;
130  }
131  else
132  return o<<"<Dtk_SmartPtr><Adr>" << d.ptr_ << "</Adr></Dtk_SmartPtr>"<<std::endl;
133  }

Field Documentation

◆ ptr_

template<typename T >
T* Dtk_SmartPtr< T >::ptr_
protected
DTK_ASSERT
#define DTK_ASSERT(expr)
Definition: define.h:743
Dtk_SmartPtr::IsNULL
Dtk_bool IsNULL() const
Definition: util_ptr_dtk.hpp:118
Dtk_SmartPtr::ptr_
T * ptr_
Definition: util_ptr_dtk.hpp:50