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 :)