Singleton : Instanciation interne : static ou pointeur ?
	
	
		Bonjour à tous,
Je connais bien l'utilité d'avoir un Singleton (pour les gestionnaires etc...).
En revanche, je tombe régulièrement sur deux implémentations.
L'une :
	Code:
	
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   |  
template<class T>
class CSingleton
{
public:
   T* GetInstance()
   {
       if(!m_pInstance)
          m_pInstance = new T();
       return m_pInstance;
   }
 
   void Release()
   {
       if(m_pInstance)
       {
           delete m_pInstance;
           m_pInstance = 0;
       }
   }
 
private:
   T* m_pInstance;
}; | 
 Et l'autre :
	Code:
	
1 2 3 4 5 6 7 8 9 10 11
   |  
template<class T>
class CSingleton
{
public:
   T* GetInstance()
   {
       static T instance;
       return instance;
   }
}; | 
 Laquelle est préférable ?
La première différence que je vois est qu'on a pas à gérer la destruction dans la second (l'instance statique étant détruite à l'arrête du programme). L'inconvénient étant qu'on ne contrôle pas le moment de la destruction.
Merci :)