Ist dies der BESTE SingleTon?



  • Hi,

    mal ne blöde frage: aber ist dieser Singleton der "beste" unter den Singletons? oder gibt es einen besseren? Wenn ja wo sind die vor und nachteile dieses Singletons gegenüber dem anderen?

    Aber erstmal code:

    class log
    {
    public:
        inline static log& getInstance (void)
        {
            static log Instanz;
    
            return Instanz;
        }
    
        inline void setFile (std::string FileName = "Protokoll.html")
        {
            m_FileName = FileName;
            m_FileStream.open (m_FileName.c_str(), std::ios::out);
            m_FileStream.close ();
        }
    
        inline template<class T> void write (const T& data)
        {
            m_FileStream.open (m_FileName.c_str(), std::ios::out | std::ios::app);
            m_FileStream.write (data, sizeof(data));
            m_FileStream.close ();
        }
    
    private:
        log  (void) {};
        ~log (void) {};
    
        std::string     m_FileName;
        std::fstream    m_FileStream;
    };
    


  • stell dir vor du hast noch zwei andere singletons (A und B).
    -> A konstruiert - alles ok.
    -> dein singleton wird während des ctors von B konstruiert
    -> B wird konstruiert - hat aber bedarf etwas nach log zu schreiben
    ...
    -> B wird zerstört - ok
    -> dein singleton wird zerstört (last come, first destroyed)
    -> A wird zerstört - achtung, etwas läuft schief: schreiben in das log (ups, das existiert nicht mehr)

    folgerung

    - gut & schlecht sind nicht absolut, weil situationsabhängig. (;) )
    - modern c++ design kaufen & lesen.



  • kein geld.

    welcher singleton ist wann am besten?



  • --- schrieb:

    welcher singleton ist wann am besten?

    im allgemeinen ist das meyers-singleton am besten. also das, was du da gemacht hast. aber manchmal ist es nicht genug. dann muß man noch etwas nachfeilen oder ganz was anderes machen.

    stell dir vor du hast noch zwei andere singletons (A und B).
    -> A konstruiert - alles ok.
    -> dein singleton wird während des ctors von B konstruiert
    -> B wird konstruiert - hat aber bedarf etwas nach log zu schreiben
    ...
    -> B wird zerstört - ok
    -> dein singleton wird zerstört (last come, first destroyed)
    -> A wird zerstört - achtung, etwas läuft schief: schreiben in das log (ups, das existiert nicht mehr)

    folgerung

    - gut & schlecht sind nicht absolut, weil situationsabhängig. ( )
    - modern c++ design kaufen & lesen.



  • modern c++ design kaufen & lesen

    ich finde das singelton dadrin am besten 🙂
    //edit beim meyers singelton find ichs ein bischen dumm, dass man nicht selber entscheiden kann, wann die instanz gekillt werden soll, durch das static bleibt sie bis zum ende des programms...


Anmelden zum Antworten