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 |
Partager