Implemetation de la classe Singleton
//une implemetation d'une classe singleton qui
//permet l'appel du destructuer de Base
//ce qui n'est pas le cas pour l'implémentation
//classique de la classe Singleton (cf mon précédent
//post)
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 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
class Base //une seule instance de Base
{
private :
friend class Singleton;
Base () {std::cerr<<"constructeur de Base"<<std::endl;};
public:
~ Base() {std::cerr<<"destructeur de Base"<<std::endl;};
int toto;
};
class Singleton //classe chargee de l'instanciation de Base
{
public:
static Singleton* Instance()
{
if (! pt.get())
pt=std::auto_ptr<Singleton>(new Singleton);
return pt.get();
}
std::auto_ptr<Base> base;
private:
Singleton(): base(new Base) {}
static std::auto_ptr<Singleton> pt;
};
std::auto_ptr<Singleton> Singleton::pt;
int _tmain(int argc, _TCHAR* argv[])
{
Singleton::Instance()->base->toto=5;
Singleton::Instance()->base->toto=12;
Singleton::Instance()->base->toto=5;
Singleton::Instance()->base->toto=12;
//une seule instance de Base construite
return (0);
}//appel destructeur |
Bon ça vaut ce que ça vaut .....
Base pourrait dériver de la classe Singleton mais
une relation de composition me parait plus judicieuse.
A+
appel de la methode instance()
tu fais comment pour appeler la methode instance ?
Je vois pas trop sinon l'appeler via une instance de
Singleton, ce qui n'est pas vraiment le but du jeu.
Si tu pouvais m'éclairer sur cette délicate question
ce serait sympa
Cordialement