1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
class SingletonPere
{
public:
static SingletonPere* GetInstance();
virtual ~SingletonPere(); ///< Pour etre plus propre vis à vis de l'heritage. Mais attention où le placer en fonction de qui doit pouvoir detruire le singleton...
protected:
SingletonPere();
static SingletonPere* Self;
}
class SingletonFils
{
public:
static SingletonFils* GetInstance();
private: ///< donc plus heritage possible ensuite
SingletonFils();
static SingletonFils* Self;
};
SingletonPere* SingletonPere::Self=NULL;
SingletonFils* SingletonFils::Self=NULL;
SingletonPere* SingletonPere::GetInstance()
{
if(!Self) ///< SingletonPere::Self forcement
Self = new SingletonPere();
return Self;
}
SingletonFils* SingletonFils::GetInstance()
{
if (!Self) ///< SingletonFils::Self forecement !
{
if(SingletonPere::Self) ///< !Aie! Problème le pere existe déjà
{
delete SingletonPere::Self; ///< Un peu radical ? Un autre solution est de renvoyer NULL, a adapeter en fonction des besoins
}
SingletonPere::Self = Self = new SingletonFils(); ///< SingletonPere:: Self aussi comme cela SingletonPere::GetInstance renvera vous savez quoi !
}
return Self;
} |