//---------------------------------------------------------------------------- // EgalTech 2013-2013 //---------------------------------------------------------------------------- // File : EgtPointerOwner.h Data : 04.12.13 Versione : 1.4a3 // Contenuto : Dichiarazione classe template per puntatore con auto rilascio. // // // // Modifiche : 25.11.13 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once //---------------------------------------------------------------------------- template class PtrOwner { public : explicit PtrOwner( void) : m_pT( nullptr) {} explicit PtrOwner( T* pT) : m_pT( pT) {} ~PtrOwner( void) { Reset() ; } bool Set( T* pT) { Reset() ; m_pT = pT ; return ( m_pT != nullptr) ; } void Reset( void) { if ( m_pT != nullptr) delete m_pT ; m_pT = nullptr ; } T& operator*() const { return *m_pT ; } T* operator->() const { return m_pT ; } operator T*() const { return m_pT ; } private : T* m_pT ; template friend bool IsNull( PtrOwner& RPT) ; template friend T* Get( PtrOwner& RPT) ; template friend T* Release( PtrOwner& RPT) ; } ; //---------------------------------------------------------------------------- template bool IsNull( PtrOwner& RPT) { return ( RPT.m_pT == nullptr) ; } //---------------------------------------------------------------------------- template T* Get( PtrOwner& RPT) { return RPT.m_pT ; } //---------------------------------------------------------------------------- template T* Release( PtrOwner& RPT) { T* pT = RPT.m_pT ; RPT.m_pT = nullptr ; return pT ; }