diff options
Diffstat (limited to 'src/core/function/basic/SingletonStorageCollection.cpp')
-rw-r--r-- | src/core/function/basic/SingletonStorageCollection.cpp | 37 |
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 |