Singleton testen
-
ich möchte die Erzeugung und Zerstörung meines Singletons testen.
[cpp] A* one = A::getInstance(); A::getInstance()->delInstance(); A* two = A::getInstance();[/cpp]... indem die die Zeiger one und two vergleiche.
Das ging eine Zeitlang gut, jetzt ist die Speicheradresse stets gleich.
weiss jemand eine Lösung wie ich das neue dynamische Objekt garantiert an einen anderen Speicherplatz lege ?/** statische Methode um auf das Singleton zu zerstoeren */ void A::delInstance(){ if (instance != NULL){ delete(instance); instance = NULL; } }
-
Warum genau müssen es unterschiedliche Adressen sein?
Falls es wirklich nötig ist, kannst du das z.B so lösen, dass du das alte Objekt nicht freigibst, sondern intern in einer Liste oder so behälst und erst, wenn alles fertig ist auch den Bereich frei gibst. Halte ich aber für unnötig und nicht wirklich sinnvoll.
-
void A::delInstance() { if (instance != NULL){ delete(instance); instance = NULL; } }dir ist klar, dass das if hier nicht nötig ist?! (genau wie die klammern)
->void A::delInstance() { delete instance; instance = NULL; }ansonsten kann ich auch nicht verstehen, worin das problem an der gleichen speicheradresse liegt - drakons lösung find ich auch nicht so wirklich toll - ein singleton kann ohne weiteres auch noch statische member behalten und diese im dtor verwenden - das da ziemlich viel schief gehen kann, sollte kein geheimnis sein ;o)
du könntest allerhöchstens dein objekt per void* halten und nur den dtor aufrufen, ein neues erstellen und dann erst den speicher des alten freigeben - ist aber auch kein wirklich hübscher workaround...bb
-
Man muss ja auch nicht für alles automatisierte Tests haben.. Und eine Frage: Wofür braucht man denn ein Singleton, das mittendrin zerstört werden kann?