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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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