47e1a7b53e
- migliorata e integrata interfaccia di PointerOwner - aggiornamenti.
64 lines
1.8 KiB
C++
64 lines
1.8 KiB
C++
//----------------------------------------------------------------------------
|
|
// 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 T>
|
|
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 <class T> friend bool IsNull( PtrOwner<T>& RPT) ;
|
|
template <class T> friend T* Get( PtrOwner<T>& RPT) ;
|
|
template <class T> friend T* Release( PtrOwner<T>& RPT) ;
|
|
} ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
template <class T>
|
|
bool
|
|
IsNull( PtrOwner<T>& RPT)
|
|
{
|
|
return ( RPT.m_pT == nullptr) ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
template <class T>
|
|
T*
|
|
Get( PtrOwner<T>& RPT)
|
|
{
|
|
return RPT.m_pT ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
template <class T>
|
|
T*
|
|
Release( PtrOwner<T>& RPT)
|
|
{
|
|
T* pT = RPT.m_pT ;
|
|
RPT.m_pT = nullptr ;
|
|
return pT ;
|
|
}
|