El problema no estaba en el compilador sino en la progrmacion:
Y una implementacion:
Salida del ejecutable:
PD: Ahora lo pruebo en el VS 2005 que esta para el MinGW. Pero deberia funcionar igual. Espero que te sirva, nos vemos.
Código [Seleccionar]
template<class T> class Holder
{
T *pInstance;
public:
Holder()
: pInstance(0) { fputs("Constructor Holder\n",file); }
~Holder()
{
if(pInstance)
{
delete pInstance;
fputs("Destructor Holder\n",file);
}
}
T* getInstance()
{
if(!pInstance)
{
pInstance=new T;
}
return pInstance;
}
};
template<class T> class Singleton
{
protected:
Singleton()
{
fputs("Singleton::Singleton()\n",file);
}
~Singleton()
{
fputs("Singleton::~Singleton()\n",file);
}
public:
static Singleton* getSingleton()
{
static Holder<T> holder;
static Singleton *pInstance=holder.getInstance();
return pInstance;
}
};
Y una implementacion:
Código [Seleccionar]
class CA: public Singleton<CA>
{
protected:
friend class Holder<CA>;
CA()
{
fputs("\t\tConstructor CA\n",file);
}
~CA()
{
fputs("Destructor CA\n",file);
}
};
class CB: public Singleton<CB>
{
friend class Holder<CB>;
protected:
CB()
{
fputs("\t\tConstructor CB()\n",file);
}
~CB()
{
fputs("Destructor CB\n",file);
}
};
int main()
{
file=fopen("res.txt","wb");
fprintf(file,"%d\n",int(time(NULL)));
CA::getSingleton();
CA::getSingleton();
CB::getSingleton();
CA::getSingleton();
return 0;
}
Salida del ejecutable:
Código [Seleccionar]
1201364292
Constructor Holder
Singleton::Singleton()
Constructor CA
Constructor Holder
Singleton::Singleton()
Constructor CB()
Destructor CB
Singleton::~Singleton()
Destructor Holder
Destructor CA
Singleton::~Singleton()
Destructor Holder
PD: Ahora lo pruebo en el VS 2005 que esta para el MinGW. Pero deberia funcionar igual. Espero que te sirva, nos vemos.