diff --git a/src/blackmisc/datacache.cpp b/src/blackmisc/datacache.cpp index 336f219fe..22112836e 100644 --- a/src/blackmisc/datacache.cpp +++ b/src/blackmisc/datacache.cpp @@ -101,8 +101,10 @@ namespace BlackMisc CDataCache *CDataCache::instance() { - static CDataCache cache; - return &cache; + static std::unique_ptr cache(new CDataCache); + static auto dummy = (connect(qApp, &QObject::destroyed, cache.get(), [] { cache.reset(); }), nullptr); + Q_UNUSED(dummy) // declared as static to get thread-safe initialization + return cache.get(); } const QString &CDataCache::persistentStore() diff --git a/src/blackmisc/settingscache.cpp b/src/blackmisc/settingscache.cpp index adf4ebd2d..a06970c41 100644 --- a/src/blackmisc/settingscache.cpp +++ b/src/blackmisc/settingscache.cpp @@ -19,8 +19,10 @@ namespace BlackMisc CSettingsCache *CSettingsCache::instance() { - static CSettingsCache cache; - return &cache; + static std::unique_ptr cache(new CSettingsCache); + static auto dummy = (connect(qApp, &QObject::destroyed, cache.get(), [] { cache.reset(); }), nullptr); + Q_UNUSED(dummy) // declared as static to get thread-safe initialization + return cache.get(); } const QString &CSettingsCache::persistentStore()