valgrind und singleton pattern



  • ich nutze das singleton pattern ziemlich oft,
    und irgendwie nervt es, das valgrind dann immer mem-leaks anzeigt,
    weiss wer wie man das vermeiden kann?

    ich habe nun schon immer zum testen, den dtor des singleton wieder
    public gemacht, und es per delete() gelöscht, damit mich
    die meldungen nicht verwirren

    hat da wer eine bessere lösung?



  • 1. Singleton am Programmende zerstören (aufwändig und führt den Sinn ad absurdum)
    2. Statisches (Meyers-)Singleton verwenden

    MyClass& getInstance()
    {
        static MyClass instance;
        return instance;
    }
    


  • Du kannst dein Singeton mit ein bisschen RAII mischen...

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    class Singleton {
    private:
       static Singleton* mInst;
    public:
       Singleton() {
         if (mInst != 0) {
           throw "Singleton darf nur einmal erstellt werden";
         }
         mInst = this;
    
         cout<<"Erstellt"<<endl;
       }
    
       ~Singleton() {
         mInst = 0;
    
         cout<<"Geloescht"<<endl;
       }
    
        void Hello() {
            cout<<"Hello :)"<<endl;    
        }
    
       inline static Singleton* Get() { return mInst; }
    
    };
    
    Singleton* Singleton::mInst = 0;
    
    int main() {
        // alle Singletons, des Programms :)
        Singleton st1;
    
        Singleton::Get()->Hello();
    
        return EXIT_SUCCESS;
    }
    


  • oder mit einer Wächterklasse arbeiten.
    http://www.oop-trainer.de/Themen/Singleton.html


Anmelden zum Antworten