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 verwirrenhat 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 verwendenMyClass& 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