Ja, ich weiss, das geht nicht.
Fuer ein Singleton habe ich grob folgenden Aufbau:
singleton.h
So und ähnlich gibt es sechs Singeltons in meinem Programm. Das
p_instance = this;
im Konstruktor ist notwendig, da sich einige der Singeltons gegenseitig aufrufen. Das ganze funktioniert wie erwartet sehr schön. Beim initialisieren bauen sich die Singeltons, meist Managers auf, benutzen sich gegenseitig, und es gib immer nur einen von jeder Sorte.
So weit so gut.
Ab irgend einem Punkt, und ich kann diesen Punkt auch nicht genau beschreiben, verwandeln sich die singleton * p_instance in NULL. Nun sind sie privat und nur durch Zugriffsmethoden benutzbar. Ausgaben in der destroy() Methode haben nichts ergeben.
Ich habe mir den Pointer in den get_instance methoden ausgeben lassen, und manchmal ist er plötzlich NULL. Wie kann das sein?
Kann es sein, dass die Initialisierung
noch mal gemacht wird?
Zum Aufbau des Ganzen vielleicht noch:
Die Hauptklasse ist ein ObjectManager, der ein Singelton ist. Dieser instantiiert verschiedene andere Manager auch als Singletons. Das Ganze wird in eine statische lib gepackt und gegen das Hauptprogramm gelinkt, welches nur den ObjectManager kennt und ihn instantiiert.
Vier nicht ganz dumme Programmier haben schon Stunden auf den Code geglozt und hoffen von Euren Loesungsvorschlaegen Erloesung
Vielen Dank
DataNaut
Fuer ein Singleton habe ich grob folgenden Aufbau:
singleton.h
Code:
class singleton {
public:
static id_singleton * get_instance();
static void destroy();
// usw..
private:
singleton ();
~singleton ();
// singelton pointer
static singleton * p_instance;
// usw..
};
singleton.cpp
#include "singleton.h"
singleton* singleton:: p_instance = NULL;
singleton* singleton:: get_instance()
{
if (!p_instance)
{
p_instance = new singleton();
}
return p_instance;
}
void singleton::destroy()
{
delete p_instance;
p_instance = NULL;
}
singleton::singleton ()
{
p_instance = this;
}
singleton::~singleton()
{
}
So und ähnlich gibt es sechs Singeltons in meinem Programm. Das
p_instance = this;
im Konstruktor ist notwendig, da sich einige der Singeltons gegenseitig aufrufen. Das ganze funktioniert wie erwartet sehr schön. Beim initialisieren bauen sich die Singeltons, meist Managers auf, benutzen sich gegenseitig, und es gib immer nur einen von jeder Sorte.
So weit so gut.
Ab irgend einem Punkt, und ich kann diesen Punkt auch nicht genau beschreiben, verwandeln sich die singleton * p_instance in NULL. Nun sind sie privat und nur durch Zugriffsmethoden benutzbar. Ausgaben in der destroy() Methode haben nichts ergeben.
Ich habe mir den Pointer in den get_instance methoden ausgeben lassen, und manchmal ist er plötzlich NULL. Wie kann das sein?
Kann es sein, dass die Initialisierung
Code:
singleton* singleton:: p_instance = NULL;
Zum Aufbau des Ganzen vielleicht noch:
Die Hauptklasse ist ein ObjectManager, der ein Singelton ist. Dieser instantiiert verschiedene andere Manager auch als Singletons. Das Ganze wird in eine statische lib gepackt und gegen das Hauptprogramm gelinkt, welches nur den ObjectManager kennt und ihn instantiiert.
Vier nicht ganz dumme Programmier haben schon Stunden auf den Code geglozt und hoffen von Euren Loesungsvorschlaegen Erloesung
Vielen Dank
DataNaut