aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/function/basic/SingletonStorageCollection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/function/basic/SingletonStorageCollection.cpp')
-rw-r--r--src/core/function/basic/SingletonStorageCollection.cpp37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/core/function/basic/SingletonStorageCollection.cpp b/src/core/function/basic/SingletonStorageCollection.cpp
index 144b69e2..e69c1279 100644
--- a/src/core/function/basic/SingletonStorageCollection.cpp
+++ b/src/core/function/basic/SingletonStorageCollection.cpp
@@ -28,6 +28,7 @@
#include "SingletonStorageCollection.h"
+#include <memory>
#include <shared_mutex>
#include "core/function/basic/SingletonStorage.h"
@@ -35,6 +36,10 @@
namespace GpgFrontend {
+std::unique_ptr<SingletonStorageCollection,
+ SecureObjectDeleter<SingletonStorageCollection>>
+ instance = nullptr;
+
class SingletonStorageCollection::Impl {
public:
/**
@@ -43,18 +48,22 @@ class SingletonStorageCollection::Impl {
* @return SingletonStorageCollection*
*/
static auto GetInstance(bool force_refresh) -> SingletonStorageCollection* {
- static SingletonStorageCollection* instance = nullptr;
-
if (force_refresh || instance == nullptr) {
- instance = new SingletonStorageCollection();
- SPDLOG_TRACE("new single storage collection created: {}",
- static_cast<void*>(instance));
+ instance = SecureCreateUniqueObject<SingletonStorageCollection>();
+ SPDLOG_TRACE("a new single storage collection created, address: {}",
+ static_cast<void*>(instance.get()));
}
-
- return instance;
+ return instance.get();
}
/**
+ * @brief Get the Instance object
+ *
+ * @return SingletonStorageCollection*
+ */
+ static void Destroy() { instance = nullptr; }
+
+ /**
* @brief Get the Singleton Storage object
*
* @param singleton_function_object
@@ -95,14 +104,18 @@ SingletonStorageCollection::SingletonStorageCollection() noexcept
SingletonStorageCollection::~SingletonStorageCollection() = default;
+auto GpgFrontend::SingletonStorageCollection::GetInstance(bool force_refresh)
+ -> GpgFrontend::SingletonStorageCollection* {
+ return Impl::GetInstance(force_refresh);
+}
+
+void SingletonStorageCollection::Destroy() {
+ return SingletonStorageCollection::Impl::Destroy();
+}
+
auto SingletonStorageCollection::GetSingletonStorage(
const std::type_info& type_id) -> GpgFrontend::SingletonStorage* {
return p_->GetSingletonStorage(type_id);
}
-auto GpgFrontend::SingletonStorageCollection::GetInstance(
- bool force_refresh = false) -> GpgFrontend::SingletonStorageCollection* {
- return Impl::GetInstance(force_refresh);
-}
-
} // namespace GpgFrontend \ No newline at end of file