Die Verwendung ist, um .inance Zugriff, auch doppelte Objekte dieser Klassen zu verhindern.Verhindern Sie doppelte Objekte in Klassen/Instanzenzugriff mit Singleton
Ist dies eine gute Code-Implementierung eines Singleton?
template <typename T> class singleton
{
public:
static T *ms_singleton;
singleton()
{
assert(!ms_singleton);
long offset = (long)(T *) 1 - (long)(singleton <T> *)(T *) 1;
ms_singleton = (T *)((long) this + offset);
}
virtual ~singleton()
{
assert(ms_singleton);
ms_singleton = 0;
}
static T &instance()
{
assert(ms_singleton);
return (*ms_singleton);
}
static T &Instance()
{
assert(ms_singleton);
return (*ms_singleton);
}
static T *instance_ptr()
{
return (ms_singleton);
}
};
template <typename T> T *singleton <T>::ms_singleton = NULL;
Wie ich es verwenden:
class test1: public singleton<test2>
{
// Something
};
Wenn nicht, was hier falsch ist? Was soll ich hier umschreiben?
Warum nicht Meyers, wenn Sie wirklich wollen Singleton. – Jarod42
Dies ist kein Singleton, da Sie einen öffentlichen Konstruktor haben. – NathanOliver
Und Ihre Offset-Berechnung mit Besetzung ist seltsam ... was möchten Sie erreichen? – Jarod42