Warum macht man beim Singleton Copykonstruktor und Zuweisungsoperator private?
-
Reicht ein privater Konstruktor nicht für alle Situationen?
-
Ich meinte privater Konstruktor und privater Destruktor.
Das reicht irgendwie schon eine Kopie zu verhindern nach meinen Tests...
-
Weil es beim Singleton Pattern nur eine einzige Instanz des Objekts geben darf.
MfG
-
Nein, genügt nicht. Man kann sonst Kopien ziehen.
Singleton kopie(Singleton::instance());
oder ähnliches.
MfG Jester
-
eViLiSSiMo: Na klar, aber mir ist es noch nicht gelungen eine Kopie davon zu erzeugen, wenn Konstruktor und Destruktor private sind.
Jester: Dieses Konstrukt klappt bei mir nicht, wenn der Destruktor schon private ist. Dann kriege ich einen Kompilerfehler.
-
Beweiscode
#include <iostream> class Singleton { public: static Singleton& instance() { static Singleton instance; return instance; } private: Singleton() { std::cout << "Konstruktor" << std::endl; } ~Singleton() { } }; int main() { Singleton kopie(Singleton::instance()); }
`Singleton::~Singleton()' is private
-
Jo klar, weil beim verlassen des Scopes der Destruktor aufgerufen wird. Also, Destruktor nicht aufrufen. => leg's mit new an und "vergiß" das delete, dann geht es durch und Du hast ne Kopie.
MfG Jester
-
Ach vergesst es wieder....