Klasse einmal instanzierbar machen



  • Hi,
    Ich würde gerne eine Klasse lediglich einmal instanzierbar machen.
    Ich glaueb es gab für solche Klassen einen bstimmten Fachausdruck, unter welchem im Netz auch Quellcode zu finden ist.
    Ich könnte ne Klassenvariable im Konstruktor abfragen... Aber glaub da gabs was besseres.

    Gtuß Alex



  • Hallo,

    Schau mal nach Singleton.



  • Versuchs mit einer anonymen Klasse, fallst du keinen Konstruktor hast/brauchst. Soviel ich weiß lassen sie sich nur einmal instantiieren weil man sie durch den fehlenden Namen ja nicht ansprechen kann.



  • Genau,

    Okay danke danach hab ich gesucht.
    Das ging flott.



  • AlexanderKiebler schrieb:

    Hi,
    Ich würde gerne eine Klasse lediglich einmal instanzierbar machen.
    Ich glaueb es gab für solche Klassen einen bstimmten Fachausdruck, unter welchem im Netz auch Quellcode zu finden ist.
    Ich könnte ne Klassenvariable im Konstruktor abfragen... Aber glaub da gabs was besseres.

    Gtuß Alex

    Wie BRaunstein sagte: Ein Singleton. Hier ein Beispiel für Dich:

    class MyClass
    {
    private:
       MyClass() {}
    
       // verhindert das kopieren, geht auch indem man von boost::noncopyable erbt
       MyClass(const MyClass&){}
       MyClass& operator=(MyClass&){ return this; } 
    public:
    
       static MyClass& GetInstance()
       {
          static MyClass OnlyOne;
          return OnlyOne;
       } 
    };
    

    Die Klasse lässt sich dank des privaten Konstruktors nur einmal instanzieren und nicht kopieren.
    HTH
    rya.



  • AlexanderKiebler schrieb:

    Genau,

    Okay danke danach hab ich gesucht.
    Das ging flott.

    Wenn, dass das richtige war, dann programmierst du nicht in C++ 😮



  • Zeus schrieb:

    Wenn, dass das richtige war, dann programmierst du nicht in C++ 😮

    Manchmal macht es doch Sinn die Klasse zu verriegeln.



  • darkfate schrieb:

    Manchmal macht es doch Sinn die Klasse zu verriegeln.

    Das Problem ist, dass man bei fehlendem Namen keine Konstruktoren bereitstellen kann und auch sonst nicht verhindern kann, dass mehrere Instanzen angelegt werden:

    struct
    {
       // ...
    } anonymous;
    
    template <typename T>
    void Func(const T&)
    {
        T duplicate;
    }
    
    Func(anonymous);
    

    In C++0x wirds sogar noch einfacher:

    typedef decltype(anonymous) KnownType;
    


  • Wann machts eigentlich Sinn, in C++ mit Singleton zu arbeiten
    ??
    Und wann kommt jetzt endlich C++0x ?? 🙂

    Die Klasse soll die Zeit für eine Simulation angeben. Später wird da ev. was mit OpenGL ausgegeben.

    Für Inertialsysteme wo jedes seine eigene Zeit hat muss ich die Klasse dann wieder auf machen oder ?? =)....Aber das möchte ich gerne erstmal vermeiden.



  • AlexanderKiebler schrieb:

    Wann machts eigentlich Sinn, in C++ mit Singleton zu arbeiten

    Selten, aber ich würde allgemeiner sagen: Wenn eine Klasse nur eine Instanz zur Laufzeit haben wird, und von sehr zentraler Rolle über die gesamte Lebenszeit des Programms ist.

    AlexanderKiebler schrieb:

    Und wann kommt jetzt endlich C++0x ?? 🙂

    Aller Wahrscheinlichkeit wird der Standard 2011 verabschiedet.


Log in to reply