Tu peux utiliser la forme la plus simple du singleton, si ses inconvénients n'en sont pas pour toi (initialisation non thread-safe avec un compilo pre-C++11, destruction après la fin du main(), impossible de contrôler l'ordre si plusieurs singletons inter-dépendants).
class GameWindow
{
public:
static GameWindow& GetInstance()
{
static GameWindow instance;
return instance;
}
...
};
Et pourquoi avoir un membre statique (autre que l'instance de la classe) dans une classe singleton ?
class GameWindow
{
public:
static GameWindow& GetInstance()
{
static GameWindow instance;
return instance;
}
...
};
Je vais essailler ça ce soir :)
Et pourquoi avoir un membre statique (autre que l'instance de la classe) dans une classe singleton ?
Parce que j'ai pas dormit de la nuit? ;D
Merci pour les réponses rapides.
tu peux passer par une classe template pour créer ton singleton.
////////////////////////////////////////////////////////////
/// Template servant à construire les classes singleton
////////////////////////////////////////////////////////////
template <class T>
class CSingleton
{
public :
//----------------------------------------------------------------
// Renvoie l'instance unique de la classe
//----------------------------------------------------------------
static T* GetInstance()
{
if (!Inst)
Inst = new T;
return Inst;
}
//----------------------------------------------------------------
// Détruit l'instance unique de la classe
//----------------------------------------------------------------
static void Destroy()
{
delete Inst;
Inst = NULL;
}
protected :
//----------------------------------------------------------------
// Constructeur par défaut
//----------------------------------------------------------------
CSingleton() {}
//----------------------------------------------------------------
// Destructeur
//----------------------------------------------------------------
~CSingleton() {}
private :
//----------------------------------------------------------------
// Données membres
//----------------------------------------------------------------
static T* Inst; ///< Instance unique de la classe
//----------------------------------------------------------------
// Copie interdite
//----------------------------------------------------------------
CSingleton(const CSingleton&);
CSingleton& operator =(const CSingleton&);
};
template <class T> T* CSingleton<T>::Inst = (T*)NULL;
et ta classe GameWindow hérite de CSingleton de la maniere suivante
class GameWindow : public CSingleton<GameWindow >
{
friend class CSingleton<GameWindow >;
protected:
GameWindow ();
~GameWindow();
...
};