JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=1d79109c904ad1bc71c4298b71b6c984Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

[Visual C++] Singleton

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> FAQ
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
xardias
JLI Master


Alter: 37
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 11.10.2004, 12:23    Titel: [Visual C++] Singleton Antworten mit Zitat

CPP:
#include <iostream>

/*
 * Diese Klasse implementiert die Funktion getSingleton()
 * Damit erhält man einen zeiger auf die Globale instanz
 * der Klasse "type"
 */

template<typename type> class Singleton
{
public:
   static type* getSingleton()
   {
      static type* instance = 0;
      if( !instance ) instance = new type();

      return instance;
   }
};

/*
 * Wir leiten unsere TestClass von der Singleton Klasse
 * ab mit type=TestClass
 */

class TestClass: public Singleton<TestClass>
{
public:
   void test()
   {
      std::cout << "Hallo Singleton";
   }
};

int main()
{
   /*
    * Da die Funktion getSingleton statisch ist kann man von überall aus auf sie zugreifen.
    * Die Instanz wird erzeugt, sobald getSingleton das erste mal aufgerufen wird.
    */

   TestClass::getSingleton()->test();
   return 0;
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 47
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 15.10.2004, 13:05    Titel: Antworten mit Zitat

Das Problem mit dieser Implementierung ist nur das/die Memory Leaks, die erzeugt werden. Man müsste am Ende dann also noch

CPP:
delete TestClass::getSingleton();


aufrufen, was sehr unschön ist. Besser wäre folgende Implementierung:

CPP:
template<typename type> class Singleton
{
public:
   static type& getSingleton()  // ev. static const type&
   {
      static type instance;

      return instance;
   }
};



Leider hat der VC2003 Compiler hier einen Fehler und erzeugt mehrere Instanzen, deshalb sollte/muss man es so ändern:

CPP:
template<typename type> class CSingleton
{
   public:

      static type& GetInstance()
      {
         return Instance;
      }

   private:
      static type Instance;
};

template<typename type> type CSingleton<type>::Instance;



C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> FAQ Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum