Ich schreibe gerade eine Singleton-Klasse und mache mir Gedanken darueber, wann die eine Instanz wieder geloescht wird.
Hier mal die Klasse:
Code: Alles auswählen
class ConfigSingleton : public QObject
{
Q_OBJECT
public:
static ConfigSingleton* getInstance(void)
{
mutex.lock();
if(!pInstance_)
{
pInstance_ = new ConfigSingleton(FILENAME);
}
mutex.unlock();
return pInstance_;
}
~ConfigSingleton(){qDebug() << "test";}
....
private:
ConfigSingleton(const QString &filename, QObject *parent = 0);
static ConfigSingleton *pInstance_;
static QMutex mutex;
};
Wie kann ich bei Programmende dafuer sorgen, dass diese Instanz geloescht wird?
Ich habe versucht das aboutToQuit() signal des QApplication-Objektes mit dem deleteLater() slot der Instanz zu verbinden. Leider sehe ich dann aber die test-ausgabe im Destruktor nicht. Heisst das nun, dass das Objekt nicht zerstoert wurde, oder kann Qt einfach nach dem emit von aboutToQuit() keine Debug Ausgaben mehr auf die Konsole bringen? Wenn ich denn deleteLater() manuell aufrufe, gehts.
Das aboutToQuit() erzeuge ich mit einem Button:
Code: Alles auswählen
QPushButton button("close");
QObject::connect( &button, SIGNAL(clicked()),
qApp, SLOT(quit()));
button.show();
Oder ist es besser der Instanz als Parent qApp zu geben? Dann sollte es doch auch geloescht werden, wenn die Applikation sich beendet. Jedoch kommt auch dann kein test-String aus dem Destruktor durch.
Hat schonmal jemand sowas implementiert und hat eine gute Loesung?
Col